在键映射中使用Vimgrep中的多个模式

时间:2015-11-25 18:29:29

标签: vim vimgrep

在我的vimrc中,我有一个映射来查找包含TODO的所有行并将它们放在quickfix窗口中:

 nnoremap <leader>f :vimgrep /TODO/j % \| :cw<CR>

我现在想以相同的方式添加替代模式FIXME。所以我试过

 nnoremap <leader>f :vimgrep /TODO\|FIXME/j % \| :cw<CR>

nnoremap <leader>f :vimgrep /TODO<bar>FIXME/j % \| :cw<CR>

但都没有返回任何结果。

 vimgrep /TODO|FIXME/j %
手动键入时,

在:提示符下工作。到目前为止,我的解决方法是:

function! FindFixme()
    vimgrep /TODO\|FIXME/j %
    cw
endfunction
nnoremap <leader>f :call FindFixme()<CR>

但我真的不明白为什么我不能让它作为单个地图命令工作。

感谢。

1 个答案:

答案 0 :(得分:9)

交替的正则表达式项是\|,您确实需要转义|,以便它不会结束映射命令。总之,你需要两个反斜杠:一个用于转义,另一个用于项目:

nnoremap <leader>f :vimgrep /TODO\\|FIXME/j % \| :cw<CR>

但我更喜欢<Bar>符号,甚至可能与<Bslash>结合使用:

nnoremap <leader>f :vimgrep /TODO<Bslash><Bar>FIXME/j % <Bar> :cw<CR>

您可以进一步缩短为:

nnoremap <leader>f :vimgrep /TODO<Bslash><Bar>FIXME/j %<Bar>cw<CR>