Vim 状态行不会从表达式扩展颜色/突出显示组

Sau*_*ier 5 vim colors highlight expansion statusline

我写了一个返回字符串的函数:

\n\n
function! StatusBricks()\n    let l:stat = Brick(statusbricks#ReportLinecount(\'raw\'), {\n        \\ \'brick_color\': \'LineNr\',\n        \\ \'delimiter_position\': \'right\',\n        \\ \'delimiter_right\': \'\xe2\x9d\xaf\'\n        \\ })\n    return l:stat\nendfunction\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果具有以下格式,由 生成Brick()

\n\n
%#HighlightGroup#SomeData\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我使用该函数作为状态行内的表达式时,我希望highlight group展开该函数以便为适当的状态行部分着色:

\n\n
set statusline =%{StatusBricks()}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我得到的是状态栏字面显示%#HighlightGroup#ExpandedData而不是ExpandedData

\n\n

vim statusline 高亮组扩展

\n\n

我究竟做错了什么?

\n

198*_*983 0

的结果%{没有进一步解释,但是 的结果%!是。使用

set statusline=%!StatusBricks()
Run Code Online (Sandbox Code Playgroud)

%!帮助文件中似乎没有标签,但在 的开头附近提到了它:help 'statusline'

按照您的评论:如果您希望根据每个特定窗口的状态在状态行中使用不同的颜色,那么如果您不希望出现特定的突出显示,则可以突出显示空字符串。例如

set stl=%#error#%r%#search#
Run Code Online (Sandbox Code Playgroud)

只有只读窗口(例如打开帮助缓冲区)才会将只读标志显示为红色。诚然,根据您的突出显示要求,这可能会变得复杂。