我试图仅在光标的行上对所有正则表达式匹配应用突出显示。这段代码很接近,但每次光标移动时我都需要重新绘制屏幕,它会使光标成为正则表达式的一部分,这是不理想的。
~/.vim/syntax/abc.vim:
syn match abcline "abc\%#" hi def link abcline Todo
答案 0 :(得分: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
在视觉上非常分散注意力。)