2015-11-25 42 views
5

在我的vimrc我有一個映射,以找到TODO所有的線出來,把他們在quickfix窗口:在使用vimgrep使用多模式的鍵映射

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> 

但我真的不明白,爲什麼我不能把它作爲一個單一的映射命令工作。

謝謝。

回答

8

交替正則表達式產品\|,你確實需要逃離|,使其不結束映射命令。總之,你需要反斜槓:一個是逃避,一個保持該項目:

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>