我有一个autocmd
触发器CursorMoved
,它将match
与光标下的单词相同的单词作为语法规则,只是反转前景/背景。
我使用它来查找所有与光标下的单词相同的单词,以便立即检查拼写错误。如下所示:
autocmd CursorMoved * exe printf('match lCursor /\V\<%s\>/', escape(expand('<cword>'), '/\'))
我怎样才能从比赛中排除当前行?
答案1
为了避免当前行上的任何匹配,可以使用:help /\%l
特殊原子来匹配当前行号,然后通过以下方式断言不匹配负面前瞻:
exe printf('match lCursor /\V\%%%dl\@!\<%s\>/', line('.'), escape(expand('<cword>'), '/\'))
但在你的回答中你也指出当前单词(不是整行)不应突出显示。这可以通过负向前瞻再次实现,断言光标(\%#
)不在当前关键字(\<\k*...\k*\>
)内和( \&
) 也匹配当前单词:
exe printf('match lCursor /\V\%%(\<\k\*\%%#\k\*\>\)\@!\&\<%s\>/', escape(expand('<cword>'), '/\'))