我已将gn
映射到:lnext<cr>
;如何按住它来循环通过位置列表,即如果在最后位置则转到第一个?
由于
答案 0 :(得分:8)
以下是我的配置解决方案:
" wrap :cnext/:cprevious and :lnext/:lprevious
function! WrapCommand(direction, prefix)
if a:direction == "up"
try
execute a:prefix . "previous"
catch /^Vim\%((\a\+)\)\=:E553/
execute a:prefix . "last"
catch /^Vim\%((\a\+)\)\=:E\%(776\|42\):/
endtry
elseif a:direction == "down"
try
execute a:prefix . "next"
catch /^Vim\%((\a\+)\)\=:E553/
execute a:prefix . "first"
catch /^Vim\%((\a\+)\)\=:E\%(776\|42\):/
endtry
endif
endfunction
" <Home> and <End> go up and down the quickfix list and wrap around
nnoremap <silent> <Home> :call WrapCommand('up', 'c')<CR>
nnoremap <silent> <End> :call WrapCommand('down', 'c')<CR>
" <C-Home> and <C-End> go up and down the location list and wrap around
nnoremap <silent> <C-Home> :call WrapCommand('up', 'l')<CR>
nnoremap <silent> <C-End> :call WrapCommand('down', 'l')<CR>
答案 1 :(得分:7)
秘诀是使用:try
和:catch
与其他语言相同。您希望发现以下错误E553
或E42
。
nnoremap ]l :try<bar>lnext<bar>catch /^Vim\%((\a\+)\)\=:E\%(553\<bar>42\):/<bar>lfirst<bar>endtry<cr>
该命令的灵感来自Tim Pope的unimpaired.vim插件。
我还建议不要映射gn
。 gn
命令是一种非常方便的动作,可以对搜索模式进行操作。请参阅:h gn
。
有关详细信息,请参阅:
:h :try
:h E553
:h E42
:h :lnext
:h :lfirst