如何在vim搜索中有效地转义元字符

时间:2018-05-31 16:36:25

标签: perl vim

Perl提供了quotemeta功能,以及使用\Qlots-of-meta-characters\E构造包围字符串的可能性,以确保\Q和{{1}之间的所有字符被解释为文字。

我经常在Vim中搜索充满元字符的字符串。单独逃避每个特殊角色会适得其反。在Vim中有什么类似\E的东西会让生活更轻松吗?

1 个答案:

答案 0 :(得分:4)

您可以使用/\Vstring-to-search

有两点需要注意:

  • \很特别。您仍然可以通过在其前面放置\来使用所有正则表达式元字符。
  • 没有\E等价物。 \V会影响正则表达式的其余部分。

请参阅:help /\V

您可以将其与https://stackoverflow.com/a/676619/1848654中答案中的代码结合使用,如下所示:

vnoremap <C-f> "hy/\V<C-r>=substitute(@h,'[\/]','\\&','g')<cr>

这个想法是:

  • 将所选文字复制(&#34;猛拉&#34;)到注册h"hy
  • 开始搜索模式:/
  • 预填充正则表达式的开头:\V
  • 插入寄存器的内容:<C-r>
  • 不要使用真正的寄存器;取代评估表达式的结果:=
  • 我们的表达式(由<cr>终止)是:substitute(@h,'[\/]','\\&','g')
    • 获取h注册表的内容:@h
    • 申请替换。在每个\\之前插入/substitute(...,'[\/]','\\&','g')