在我的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()}
但状态行中没有彩色[\s]
标记,而是显示完整的%#warningmsg#[\s]%*
字符串。
this answer中提议使用%!
代替%{}
似乎不起作用,因为我的vim会出错
line 70:
E539: Illegal character <!>: statusline+=%!StatuslineTrailingSpace()
如何让彩色状态线正常工作?
答案 0 :(得分:2)
我怀疑你必须使用%!
构造来访问缓冲区。但是,由于文档暗示%!
必须从选项的开头开始,最好的选择可能是保存当前状态行,然后使用您的函数返回整个事物。
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()
那样的东西?
答案 1 :(得分:1)
突出显示组应位于'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()}%*