Ваш подход с особым \%#
правильно. К сожалению, его :help
явно предупреждает о необходимости перерисовки (которая не выполняется автоматически по соображениям производительности).
\%# Matches with the cursor position.
WARNING: When the cursor is moved after the pattern was used, the
result becomes invalid. Vim doesn't automatically update the matches.
This is especially relevant for syntax highlighting and 'hlsearch'.
In other words: When the cursor moves the display isn't updated for
this change. An update is done for lines which are changed (the whole
line is updated) or when using the |CTRL-L| command (the whole screen
is updated).
Итак, вам нужно :autocmd CursorMoved,CursorMovedI
, чтобы вызвать перерисовку. Кроме того, вы можете вставить текущий номер строки в регулярное выражение (\%23l
) и обновить определение синтаксиса при перемещении курсора (снова через :autocmd
). Я не поклонник таких частых перерисовок; возможно, ваш прецедент также позволит просто инициировать выделение по требованию (через сопоставление) или обновлять только при использовании пауз (CursorHold[I]
событий).
Выполнение подсветки синтаксиса только для текущей строки необычно; также пересмотреть, будет ли использоваться глобальная подсветка (если вы смягчите используемую группу подсветки, особенно Todo
очень визуально отвлекает внимание).
См. ': H conceal'. –
Пожалуйста, дайте больше фона; Какова ваша конечная цель? Когда речь идет только о небольшом техническом шаге, трудно дать хороший ответ. Если вы не говорите нам ** почему ** вы этого хотите, легко поддаться [XY проблеме] (http://meta.stackoverflow.com/questions/66377/what-is-the-xy-problem). –
@IngoKarkat Цель состоит в том, чтобы выделить синтаксис на линии курсора. Причиной того, что он выделяется только на курсорной линии, является то, что он появляется так часто, что выделение будет отвлекать, чтобы пользователь мог потерять детали. – Daniel