2015-11-25 9 views
5

W moim vimrc miałem mapowanie znaleźć wszystko linię TODO w nich i umieścić je w quickfix okna:używać wielu Wzorce w Vimgrep Key mapowania

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

Chcę teraz dodać alternatywny FIXME wzór w ten sam sposób. Dlatego starałem

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

i

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

ale ani żadnych rezultatów.

vimgrep /TODO|FIXME/j % 

działa w trybie: monit po wpisaniu ręcznym. Do tej pory moje obejście jest następujące:

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

Ale tak naprawdę nie rozumiem, dlaczego nie mogę go uruchomić jako pojedynczego polecenia map.

Dzięki.

Odpowiedz

8

Regularne poz wyrażenie naprzemiennie jest \|, i rzeczywiście trzeba uciec | tak, że nie kończy polecenie mapowania. Reasumując, trzeba dwa backslashy: jedna dla ucieczki i jeden pozostanie na pozycji:

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

Ale wolałbym notacji <Bar>, może nawet w połączeniu z <Bslash>:

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

You może dalej to skrócić do:

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