perl - 如何在 vim 搜索中有效地转义元字符
问题描述
Perl
提供quotemeta
函数,以及使用\Qlots-of-meta-characters\E
构造包围字符串的可能性,以确保和之间的所有字符\Q
都\E
被解释为文字。
我经常在 Vim 中搜索包含元字符的字符串。单独转义每个特殊字符会适得其反。在 Vim 中是否有任何东西/\Qstring-to-search\E
可以让生活更轻松?
解决方案
您可以使用/\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')
- 取
推荐阅读
- c# - 编码的 UI C#:将动态日期添加到数据表
- php - PHP递归目录迭代器分块
- javascript - 用嵌套键和日期键合并对象的最有效方法是什么?
- reactjs - 测试来自 jest 模拟事件回调的返回值
- python - 如何在 inspect.getmembers 中跳过缓存的属性
- qt - QDoubleSpinBox 在 Qt 5 中带有鼠标滚动信号?
- java - 2D Array,对 Null 元素使用 get 方法,有没有优雅的解决方案?
- tensorflow - 《Recurrent Neural Networks for Drawing Classification》教程中如何导出保存的模型
- regex - 怎么 ?在python的正则表达式中使用?
- python - 如果两个 Tree 具有相同的值节点,则使用 set 计数