【问题标题】:Advanced searching in VimVim 中的高级搜索
【发布时间】:2010-09-12 23:49:19
【问题描述】:

有没有办法在 Vim 中同时搜索多个字符串?我记得在某处读过它是可能的,但不知何故忘记了这项技术。

例如,我有一个文本文件,我想同时搜索“foo”和“bar”(不一定是单个字符串,可以完全在不同的行中)。

我如何做到这一点?

【问题讨论】:

    标签: search vim vi


    【解决方案1】:
    /^joe.*fred.*bill/          : find joe AND fred AND Bill (Joe at start of line)
    /fred\|joe                  : Search for FRED OR JOE
    

    【讨论】:

    • 这也可以。而且比我在下面给出的附加答案要简单得多
    • 要是我早点找到这个就好了……:(
    【解决方案2】:

    实际上,我在发布此内容后不久就找到了答案(是的,我之前曾使用谷歌搜索但无法找到它。可能只是搜索错误)

    正确的解决方案是

    /(foo\|bar)

    @Paul Betts:管道必须被转义

    【讨论】:

    • 我认为在某些 RegExp 方言中需要转义管道,而不是其他方言。
    • 是的...我同意在 vi 中需要它,但是字符的转义非常不一致,并且必须小心地尝试将该片段直接复制到另一个实现中。
    • 是的,它是不一致的。我将不得不检查,但我不认为 Vi 遵循 PCRE(与 perl 兼容的正则表达式),我们不必这样做
    • 您也需要转义括号(在 vi(m) 中)。那里有很多很多不同的正则表达式。 Vim 是从 vi 派生的,而 vi 又是从 ex 派生的。特殊字符非常不一致,但您可以使用 \v 或 \V 来更改行为。
    • 是的,@Zathrus 说的。有关更多信息,请参阅:help magic,包括在启用各种设置的情况下需要转义的内容和不需要转义的内容的表格。 \v 是“very 魔法”。
    【解决方案3】:

    Vim 通过在命令模式下以 '/' 开头来支持正则表达式。

    所以使用类似“/(foo\|bar)”的东西(如前所述)可以解决问题。很高兴知道它为什么有效以及您正在使用什么(正则表达式)。

    【讨论】:

      【解决方案4】:
      /(foo|bar)
      

      【讨论】:

      • 默认情况下,您需要转义条和括号: /\(foo\|bar\) 但无论哪种方式,在这种情况下都不需要对它们进行分组! /foo\|bar
      猜你喜欢
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2018-07-13
      • 2015-04-17
      • 2012-04-09
      • 2015-04-06
      相关资源
      最近更新 更多