[英]statusline highlight group from function has no effect
在我的vim配置中,我有一個類似的功能
function! StatuslineTrailingSpace()
if !exists('b:statusline_trailing_space_warning')
let b:statusline_trailing_space_warning = &modifiable ? search('\s\+$', 'nw') != 0 ? ' %#warningmsg#[\s]%*' : '' : ''
endif
return b:statusline_trailing_space_warning
endfunction
然后在行的后面
set statusline+=%{StatuslineTrailingSpace()}
但是,我看到的是完整的%#warningmsg#[\\s]%*
字符串,而不是狀態%#warningmsg#[\\s]%*
的彩色[\\s]
標簽。
嘗試使用%!
而不是這個答案中提出的%{}
似乎不起作用,因為我的vim給出了錯誤
line 70:
E539: Illegal character <!>: statusline+=%!StatuslineTrailingSpace()
如何使有色狀態欄起作用?
我懷疑您必須使用%!
構造以獲得對緩沖區的訪問。 但是,由於文檔暗示該%!
必須從選項的開頭開始,最好的選擇是保存當前狀態欄,然后使用函數返回整個內容。
function! StatuslineTrailingSpace()
if !exists('b:statusline_trailing_space_warning')
let b:statusline_trailing_space_warning = &modifiable ? search('\s\+$', 'nw') != 0 ? ' %#warningmsg#[\s]%*' : '' : ''
endif
return s:former_status_line . b:statusline_trailing_space_warning
endfunction
let s:former_status_line = &statusline
set statusline=%!StatuslineTrailingSpace()
這樣的東西?
高亮組應位於'statusline'
選項中,而不應位於表達式中:
function! StatuslineTrailingSpace()
if !exists('b:stsw')
let b:stsw = &modifiable ? search('\s\+$', 'nw') != 0 ? ' [\s]' : '' : ''
endif
return b:stsw
endfunction
set statusline+=%#warningmsg#%{StatuslineTrailingSpace()}%*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.