2017-01-26 1 views
0

Я пытаюсь применить выделение для всех совпадений регулярных выражений только по строке курсора. Этот код близок, но я должен перерисовать экран каждый раз, когда курсор перемещается, и это делает курсор частью регулярного выражения, которое не является идеальным.Vim script выделяет регулярные выражения по строке курсора

~/.vim/syntax/abc.vim: 
 
syn match abcline  "abc\%#" 
hi def link abcline Todo 
+0

См. ': H conceal'. –

+0

Пожалуйста, дайте больше фона; Какова ваша конечная цель? Когда речь идет только о небольшом техническом шаге, трудно дать хороший ответ. Если вы не говорите нам ** почему ** вы этого хотите, легко поддаться [XY проблеме] (http://meta.stackoverflow.com/questions/66377/what-is-the-xy-problem). –

+0

@IngoKarkat Цель состоит в том, чтобы выделить синтаксис на линии курсора. Причиной того, что он выделяется только на курсорной линии, является то, что он появляется так часто, что выделение будет отвлекать, чтобы пользователь мог потерять детали. – Daniel

ответ

0

Ваш подход с особым \%# правильно. К сожалению, его :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 очень визуально отвлекает внимание).

+0

Отлично! Спасибо за решение и альтернативные предложения! – Daniel

Смежные вопросы