【发布时间】:2011-05-08 22:33:14
【问题描述】:
我需要在 vim 中突出显示单词列表,最好是在文件中定义这些单词。有点像拼写检查。我一直在查看http://vim.wikia.com/wiki/Highlight_multiple_words,但它要求我将每个单词定义为一个新位置,并且不支持将单词存储到文件中(尽管它们是可存储的)。
【问题讨论】:
我需要在 vim 中突出显示单词列表,最好是在文件中定义这些单词。有点像拼写检查。我一直在查看http://vim.wikia.com/wiki/Highlight_multiple_words,但它要求我将每个单词定义为一个新位置,并且不支持将单词存储到文件中(尽管它们是可存储的)。
【问题讨论】:
:匹配待办事项/\/
【讨论】:
您可以使用:match 命令。
:match Todo /word1/
命令的第一个参数是highlight-group(查看所有可用组:highlight)。第二个参数是搜索模式。
您可以将这些放在任何文件中并通过:source 加载。
另一种方法是更改正则表达式(谢谢@zpon):
:match Todo /word1\|word2\|word3/
如果您想以不同的方式突出显示它们:
:match Todo /word1/
:2match Error /word2/
:3match Title /word3/
【讨论】:
:match、:2match 和:3match 命令来执行此操作,因此您可以存储三种模式。但你也可以使用:call matchadd() (:help matchadd())。
我建议您为此使用syn keyword。 michael.kebe 和 syn match 等建议还有其他选项,例如 :match,但这些都是基于正则表达式匹配。这样做的缺点是随着要匹配的单词数量的增加,Vim 的速度会降低。关键字匹配快得多。您还可以轻松地在一行中定义多个关键字(尽管如果我没记错的话,一行中有大约 512 个字符的限制)。
syn keyword Todo word1 word2 word3
syn keyword Todo word4
syn keyword Todo word5
将这些行放在任何文件中并 :source 或将其转储到您的 ~/.vim/after/syntax/c.vim 中,以便所有 C 文件自动成为 sourced(选择您感兴趣的文件类型的语法文件) .
与michael.kebe 的回答一样,第一个参数(在本例中为Todo)是高亮组。如果您愿意并定义突出显示,您可以组成自己的组:
syn keyword MyHighlightGroup word6 word7
" Then EITHER (define your own colour scheme):
hi MyGroupName guifg=Blue ctermfg=Blue term=bold
" OR (make the colour scheme match an existing one):
hi link MyGroupName Todo
【讨论】:
: 或其他符号)并且您不能使用其中一种vim特殊语法-相关的选项关键字(contained 等)。对于那些我会使用syn match MyHighlightGroup /\<contained\>/ 或其他的人。
map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#") . " BG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"bg#")<CR> 将光标放在单词上并按 F3。如果尖括号中有任何内容,则必须将 containedin=GroupName 添加到语法关键字行中。