Строка состояния Vim не расширяет группу цветов / выделений из выражения
Я написал функцию, которая возвращает строку:
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
:
Что я делаю неправильно?
2 ответа
Результат %{
далее не интерпретируется, однако результат %!
является. использование
set statusline=%!StatusBricks()
%!
в справочном файле нет тега, но он упоминается в начале :help 'statusline'
,
После вашего комментария: если вы хотите, чтобы в строке состояния были разные цвета в зависимости от состояния каждого конкретного окна, то вы можете выделить пустую строку, если вы не хотите, чтобы отображалось определенное выделение. Например
set stl=%#error#%r%#search#
Только окна только для чтения (например, открывают буфер справки) будут иметь флаг только для чтения, показанный красным. По общему признанию это может быть сложным в зависимости от Ваших требований выделения.
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"`