【问题标题】:Vim highlight a list of wordsVim 高亮一个单词列表
【发布时间】:2011-05-08 22:33:14
【问题描述】:

我需要在 vim 中突出显示单词列表,最好是在文件中定义这些单词。有点像拼写检查。我一直在查看http://vim.wikia.com/wiki/Highlight_multiple_words,但它要求我将每个单词定义为一个新位置,并且不支持将单词存储到文件中(尽管它们是可存储的)。

【问题讨论】:

    标签: vim syntax-highlighting


    【解决方案1】:

    :匹配待办事项/\/

    【讨论】:

      【解决方案2】:

      您可以使用:match 命令。

      :match Todo /word1/
      

      命令的第一个参数是highlight-group(查看所有可用组:highlight)。第二个参数是搜索模式。

      您可以将这些放在任何文件中并通过:source 加载。

      另一种方法是更改​​正则表达式(谢谢@zpon):

      :match Todo /word1\|word2\|word3/
      

      如果您想以不同的方式突出显示它们:

      :match Todo /word1/
      :2match Error /word2/
      :3match Title /word3/
      

      【讨论】:

      • 当我在文件中添加多行时,它只是突出显示的最后一行
      • 想通了,:match VisualNOS /word1\|word2\|word3/
      • 您可以使用:match:2match:3match 命令来执行此操作,因此您可以存储三种模式。但你也可以使用:call matchadd() (:help matchadd())。
      【解决方案3】:

      我建议您为此使用syn keywordmichael.kebesyn 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
      

      【讨论】:

      • syn关键字方法有什么限制吗?我似乎对我的 tex 文件之一没有任何影响,但对所有其他文件
      • 我知道的唯一限制是单词中的字符必须都是关键字字符(即没有: 或其他符号)并且您不能使用其中一种vim特殊语法-相关的选项关键字(contained 等)。对于那些我会使用syn match MyHighlightGroup /\<contained\>/ 或其他的人。
      • 奇怪,我只用过“that”和“there”这样的普通词
      • 该段落可能已经突出显示(但作为普通文本)。尝试使用这个: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 添加到语法关键字行中。
      • 或者,发布一个完整的示例文件(如果你愿意,文本可以只是 lorem ipsum),我会弄清楚如何让它工作。
      猜你喜欢
      • 2015-10-11
      • 1970-01-01
      • 2012-06-13
      • 2014-07-04
      • 2013-07-17
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多