我尝试根据博客条目定义临时搜索功能,以便与ag
一起使用。目前,代码是:
set grepprg=ag\ --nogroup\ --nocolour\ --vimgrep
command! -nargs=+ -complete=file -bar MyAg silent! grep! <args>|cwindow|redraw!
nnoremap <leader>a :MyAg<SPACE>
这个工作正常,直到我需要搜索双引号,其中需要转义。请考虑以下示例:
:set grepprg=ag\ --nogroup\ --nocolour\ --vimgrep
:grep --php \".*jQuery.*\"
此代码工作正常。相反,给定上述MyAg
vim命令定义,请考虑以下搜索:
:MyAg --php \".*jQuery.*\"
导致以下调用:
:ag --vimgrep --php ".*jQuery.*"
反斜杠已经消失了,并且随之而来的是搜索点。
如何定义上面的MyAg
以保留转义? (或者更确切地说,是为了防止vim自己处理反斜杠并将其传递过来,不受影响。)
<q-args>
在整个表达式中添加了一对单引号,如下所示:
:ag '--vimgrep --php ".*jQuery.*"'
^ ^
这显然是无效的命令。
PS我有兴趣完成这项工作,并且了解vim-ack
和vim-ag
。
答案 0 :(得分:1)
吞咽反斜杠似乎是由-bar
命令修饰符引起的。比较:
:command! -nargs=+ -complete=file -bar MyAg echo '<args>'
:MyAg \"foo\"
"foo"
使用:
:command! -nargs=+ -complete=file MyAg echo '<args>'
:MyAg \"foo\"
\"foo\"
这不能与<q-args>
一起解决。
我无法在:help
中找到明确的声明,但我想这与使用-bar
的事实有关,Vim必须解析|
命令的余数分隔符,这意味着逃逸发挥作用。
您尝试支持命令链接是值得称赞的,但在这种情况下,最好放弃命令链接。无论如何,它会导致正则表达式分支出现问题(grep
:foo\|bar
)。