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

标签 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>

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

谢谢。

最佳答案

交替的正则表达式项是\| ,你确实需要逃避 |这样它就不会结束映射命令。综合起来,您需要两个反斜杠:一个用于转义,另一个用于保留项目:

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>

关于vim - 在 Vimgrep 中的按键映射中使用多个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923948/

相关文章:

linux - 在 Linux 上高效编辑超大文件顶部附近的内容

php - 关闭字符串中的 php 标记会停止语法突出显示

java - Vim 高亮静态变量

c++ - 如何在 Vi 和 Emacs 中使用相同缩进样式的 C++ 代码?

regex - 为什么用**/*递归搜索当前目录:vimgrep vim command?

vim - 如何在 vimgrep 中排除文件模式?

vimgrep 不区分大小写的文件模式

vim - 我的 vimgrep 搜索没有像我预期的那样运行

vim - 有什么方法可以使用 vimgrep,限制为 >1 但不是所有类型的文件?

vim - 如何将现有窗口移动到新选项卡?