Vim 函数中的statusline高亮显示组无效
在我的vim配置中,我有如下功能Vim 函数中的statusline高亮显示组无效,vim,Vim,在我的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
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]%*
字符串
正在尝试使用%代码>而不是中建议的%{}
,似乎不起作用,因为我的vim给出了错误
line 70:
E539: Illegal character <!>: statusline+=%!StatuslineTrailingSpace()
第70行:
E539:非法字符: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()}%*
您是否了解%之间的差异代码>和%{}
?看起来你想要%因为这是一个考虑缓冲区的方法。@dash tom bang我做了。但是正如我在帖子中所说的,vim在使用%时给出了一个错误是的,我现在正在研究这个,因为它很有趣。。。文档会说,当选项*以“%!”开头时,…
因此可能只是需要将整个状态行放入一个函数中。提示是%代码>必须站在一开始为我做这件事。我现在使用一个statusline函数,它将所有字符串和函数连接在一起,并通过set statusline=%使用它!Statusline()