如何在Vim命令中转义%和#字符?
|
我正在使用带有https0ѭ标志的Ack(https://github.com/mileszs/ack.vim)在Vim中搜索项目。我注意到,无论何时我搜索带有
%
或#
字符的字符串,搜索都与我期望的不匹配。我做了一些研究,发现这是因为Vim会在命令中扩展这些字符(%
是当前文件,#
到其他文件,不确定是什么)。
考虑到这些符号在代码中经常出现,这在执行搜索时是非常令人讨厌的行为。有没有一种方法,最好是自动进行转义,以使搜索按预期进行?我当前的映射是:nnoremap <leader>al :Ack --literal<space>
。
例
假设我在某个地方的CSS文件中有一个选择器#body
,我想找到它。这些是我尝试过的事情(一直没有奏效):
:Ack --literal #body
:Ack --literal \\#body
:Ack --literal \"#body\"
:Ack --literal \"\\#body\"
有什么想法为什么转义在这里无法像往常一样起作用,或者这甚至是在寻找什么?我还没有这些例子匹配任何东西。
解
我通过对字符进行两次转义来使其工作。例如,:Ack --literal \"\\\\#body\"
将在结果窗口的状态栏中显示:ack -H --nocolor --nogroup --column --literal \"#body\"
,并显示预期结果。引号似乎也是必需的。
没有找到相关结果
已邀请:
4 个回复
疾桓
输出当前缓冲区的文件名
打印一个单独的\'%\'字符
浆错
郡豪靠暖
而且看来doing15ѭ(请注意多余的引号)确实可以按预期工作:
我还没有真正测试过...
枫湃揩乾纲
或
vim时,vim不会自行处理
,而是像这样调用shell:
。对于ack调用,它将类似于
,因此bash会忽略
之后的所有内容,因为
是注释字符。对于
,它不会这样做,因为带引号的字符串中没有注释。