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



在我的vimrc中,我有一个映射,可以找到所有包含TODO的行,并将它们放在快速修复窗口中:

 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>

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

谢谢。

alternation的正则表达式项是|,您确实需要转义|,这样它就不会结束映射命令。总之,您需要两个反斜杠:一个用于转义,一个用于保留项:

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>

最新更新