如何在Vim命令中转义%和#字符?

Joh*_*ebs 14 vim ack macvim

我正在使用带有标志的Ack(https://github.com/mileszs/ack.vim)--literal来搜索Vim中的项目.我注意到,每当我搜索带有%#字符的字符串时,搜索就不像我期望的那样匹配.我做了一些研究,发现这是因为Vim会在命令中扩展这些字符(%是当前文件和#其他东西,不知道是什么).

考虑到这些符号经常在代码中出现,这在执行搜索时非常烦人.有没有办法逃脱它们,最好是自动逃脱,以便搜索按预期工作?我目前的映射是:nnoremap <leader>al :Ack --literal<space>.

假设我#body在某个CSS文件中有一个选择器,我想找到它.这些是我尝试过的(没有用过):

:Ack --literal #body
:Ack --literal \#body
:Ack --literal "#body"
:Ack --literal "\#body"
Run Code Online (Sandbox Code Playgroud)

任何逃避的想法都不会像往常那样起作用,或者甚至是搜索什么?我没有这些例子匹配任何东西.

我已经通过双重逃避角色来实现它.例如,:Ack --literal "\\#body"将显示:ack -H --nocolor --nogroup --column --literal "#body"在结果窗口的状态行中并显示预期结果.引号似乎也是必需的.

seh*_*ehe 11

你只需要用反斜杠作为前缀

:!echo %
Run Code Online (Sandbox Code Playgroud)

输出当前缓冲区的文件名

:!echo \%
Run Code Online (Sandbox Code Playgroud)

打印一个单独的'%'字符


bri*_*ris 5

显然,您必须像ack.vim问题中所述多次转义:

:Ack \\\#foo
Run Code Online (Sandbox Code Playgroud)