5

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

function! StatusBricks()
    let l:stat = Brick(statusbricks#ReportLinecount('raw'), {
        \ 'brick_color': 'LineNr',
        \ 'delimiter_position': 'right',
        \ 'delimiter_right': '❯'
        \ })
    return l:stat
endfunction

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

%#HighlightGroup#SomeData

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

set statusline =%{StatusBricks()}

但我得到的是一个字面上显示的状态行,%#HighlightGroup#ExpandedData而不是ExpandedData

vim statusline 高亮组扩展

我究竟做错了什么?

4

2 回答 2

0

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

set statusline=%!StatusBricks()

%!帮助文件中似乎没有标签,但在:help 'statusline'.

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

set stl=%#error#%r%#search#

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

于 2015-08-04T09:55:16.983 回答
0

tl;博士-使用{% %}

我意识到这是一个老问题,但我找到了未来读者可能会使用的答案。

而不是

set statusline =%{StatusBricks()}

你需要

set statusline =%{%StatusBricks()%}

来自:help 'statusline'

    {% -  This is almost same as { except the result of the expression is
          re-evaluated as a statusline format string.  Thus if the
          return value of expr contains % items they will get expanded.
          The expression can contain the } character, the end of
          expression is denoted by %}.
          The For example:
            func! Stl_filename() abort
                return "%t"
            endfunc

            `stl=%{Stl_filename()}`   results in `"%t"`
            `stl=%{%Stl_filename()%}` results in `"Name of current file"`
于 2021-11-02T11:49:43.267 回答