有没有办法在(g)Vim中突出显示多个搜索结果?

108

我想在Vim/gVim中搜索多个字符串,并使它们以不同的颜色高亮显示。是否可以通过原生的Vim或插件来实现此功能?

10个回答

142
在 vim 编辑器中,有两种简单的方式可以突出显示多个单词。
  1. 进入搜索模式,即键入 '/',然后键入 \v,后跟以 '|'(管道)分隔的要搜索的单词。
    例如:/\vword1|word2|word3

  2. 进入搜索模式,然后键入由 '\|' 分隔的要搜索的单词。
    例如:/word1\|word2\|word3

基本上,第一种方式将您置于正则表达式模式中,因此您无需在每个管道或用于搜索的其他分隔符之前添加任何额外的反斜杠。

这是非常有用的,因为您仍然可以使用“n”(或“N”)来转到下一个(或上一个)结果。 - mgarey
5
你知道如何获得多种颜色吗?@DaveDopson说的“downside”。 - lmat - Reinstate Monica

49

这可以手动完成,不需要任何脚本,适用于两种搜索模式。

:match Search /pattern/
:match Search /<CTRL-R>/   # highlight the current search pattern

搜索是高亮显示组的名称,使用自动完成来选择另一个组以不同颜色进行高亮显示。

 :match <TAB>
 :match <TAB>    # completion will list all highlight group

当您无法使用自己的vim配置时,这可能会很方便。

:match none      # clear the match pattern to stop highlighting

4
对我没有用。对于任何想尝试的人,请使用以下链接:https://dev59.com/p2855IYBdhLWcg3wvnOE#Lp6cEYcBWogLw_1b7H9v - Eric Chen

43

要在vim中搜索多个字符串,可以这样做:

/search1\|search2

这个方法有效,并且会用相同的颜色突出显示search1search2。 你必须在vim编辑器中执行此操作。


如果您想查找search1但不匹配search2,该如何修改vim中的命令行? - medev21

21

这个最酷了,只需在要(取消)高亮的每个单词上点击\+m(或双击)。每次都会得到不同的颜色。 - KcFnMi

7

是的,您可以直接使用matchadd()进行高亮。

例如,要添加一个突出显示尾随空格的效果:

:highlight ExtraWhitespace ctermbg=grey guibg=grey
:call matchadd('ExtraWhitespace', '\s\+$', 11)

浏览所有匹配项:

:echo getmatches()

要删除匹配项,请使用matchdelete()。例如:

:call matchdelete(7)

5

MultipleSearch :同时突出显示多个搜索,每个搜索用不同的颜色。

http://www.vim.org/scripts/script.php?script_id=479

:Search <pattern1> //will highlight all occurences of <pattern1> in the current buffer.
A subsequent :Search <pattern2> will highlight all occurences of <pattern2> in the current buffer.

5
:%s /red\|green\|blue/

不过,我不确定如何为不同的关键字保留不同的颜色。谢谢。


3

我的Mark插件可以同时使用不同颜色突出显示多个单词,就像内置搜索一样。它带有许多映射和命令,可以保留模式,并支持多个调色板。


1
它是否有带有指南描述的Github页面?在vim.org上阅读起来并不容易。同时报告问题也不方便。 - Ertuğrul Altınboğa
我该如何通过Vundle安装这个插件?因为github vim-scripts上的代码太旧了。 - Ertuğrul Altınboğa
@LiMingHung 那个来自vim-scripts的版本可以工作,但是它已经过时了。你可以向vim-scripts的开发者请求更新它;他们的爬虫有一些烦人的问题。 - Ingo Karkat
2
你能把你的插件放到Github上吗?这样就可以直接通过Vundle安装了,不必依赖于vim-scripts。 - Ertuğrul Altınboğa
2
@ErtuğrulAltınboğa:Mark.vim现在已经在GitHub上了(https://github.com/inkarkat/vim-mark)! - Ingo Karkat
显示剩余2条评论

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接