【问题标题】:Vim statusline does not expand color/highlight group from expressionVim 状态行不从表达式扩展颜色/高亮组
【发布时间】:2015-10-26 15:03:00
【问题描述】:

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

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 colors highlight expansion statusline


    【解决方案1】:

    %{ 的结果不会被进一步解释,但%! 的结果是。使用

    set statusline=%!StatusBricks()
    

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

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

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

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

    【讨论】:

    • 帮助不太清楚%{}的进一步解释。也许我错过了什么。但是%! 有一个副作用:来自help:“请注意,“%!”表达式是在当前窗口和缓冲区的上下文中计算的,而 %{} 项是在状态行所在的窗口的上下文中计算的属于。”因此,不幸的是,%! 并没有真正的用处。
    • 查看编辑,如果这就是你的意思。也许您可以在问题中包含更多细节和代码,以便我们知道您想要实现的目标。
    • 当使用%!时,你可以在你的函数中使用winbufnr(g:statusline_winid)来识别你正在绘制其状态线的缓冲区。
    【解决方案2】:

    tl;dr - 使用 {% %}

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

    而不是

    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"`
    

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 2015-06-04
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多