首页 > 解决方案 > 如何在 vim 搜索中有效地转义元字符

问题描述

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

我经常在 Vim 中搜索包含元字符的字符串。单独转义每个特殊字符会适得其反。在 Vim 中是否有任何东西/\Qstring-to-search\E可以让生活更轻松?

标签: perlvim

解决方案


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

有两个警告:

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

:help /\V

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

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

这个想法是:

  • 将所选文本复制(“yank”)到寄存器中h"hy
  • 开始搜索模式:/
  • 预填充正则表达式的开头:\V
  • 插入寄存器的内容:<C-r>
  • 不要使用真实的寄存器;取而代之的是计算表达式的结果:=
  • 我们的表达式(以 结尾<cr>)是:substitute(@h,'[\/]','\\&','g')
    • h寄存器的内容:@h
    • 应用替换。\在每个\and之前插入一个/substitute(...,'[\/]','\\&','g')

推荐阅读