代码之家  ›  专栏  ›  技术社区  ›  iksemyonov

在vim中定义命令时如何保留反斜杠?

  •  2
  • iksemyonov  · 技术社区  · 7 年前

    我试图基于博客条目定义一个临时搜索功能,用于 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.*"
    

    反斜杠消失了,搜索的重点也随之消失了。

    我如何定义 髓系抗原 为了保护逃跑?(或者,更确切地说,是为了防止vim自己处理反斜杠并使其不受影响地通过。)

    <q-args> 将一对单引号添加到整个表达式中,如下所示:

    :ag '--vimgrep --php ".*jQuery.*"'
        ^                            ^
    

    这显然是无效的命令。

    PS我对这项工作很感兴趣 vim-ack vim-ag

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ingo Karkat    7 年前

    吞咽反斜杠似乎是由于 -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 但我想这与 -巴 ,Vim必须解析 | 命令分隔符,这意味着逃逸开始发挥作用。

    您尝试支持命令链接是值得称赞的,但在这种情况下,最好放弃它。这将导致正则表达式分支出现问题(在 grep : foo\|bar ),无论如何。