我在 Vim 中安装了 Syntastic,它可以完美地查找错误(主要是我正在处理的 Python 代码中的错误)。如果我在文件中正常跳转,当光标位于相关行上时,我会在状态栏中看到错误。
我不明白如何在错误之间直接导航。
我知道 syntastic 正在将错误加载到 Vim 位置列表中,我可以使用 来显示该错误:lopen
,切换到该窗口,选择一行并点击Enter,然后转到正确行的主窗口。
不过,我想要做的是不要打开列表,而只是在有错误的文件中进行编辑,然后按键盘快捷键跳到下一个警告/错误的位置。
这可能吗?文档建议这样做,:lNext
并且:lprevious
是相关的,但它们让我很困惑E553: No more items
。
答案1
:lne[xt]
和:lp[revious]
是正确的快捷方式。
但:lN[ext]
与 不同:lne[xt]
:它是 的替代品:lp[revious]
。
您收到的消息是由于当您遇到最后一个或第一个错误时这些命令没有回绕。
您在问题中列出的命令都会跳转到上一个错误,但很有可能您已经遇到第一个错误,并且没有任何反应前。使用正确的命令,记住它们不会循环,这样你就会有好处。
阅读:h location-list
以了解完整的命令列表。
答案2
如果列表中只有一个问题,:ll
将导航至该问题。
这是针对您的 .vimrc 的修复程序,它将使按键映射到:lnext
并:lprev
正常工作,只要有一个问题(通过跳转到它)。将末尾的 nmappings 更改为您喜欢的按键顺序。
(从https://github.com/scrooloose/syntastic/issues/32)
" Fix syntastic error jumping
function! <SID>LocationPrevious()
try
lprev
catch /^Vim\%((\a\+)\)\=:E553/
llast
endtry
endfunction
function! <SID>LocationNext()
try
lnext
catch /^Vim\%((\a\+)\)\=:E553/
lfirst
endtry
endfunction
nnoremap <silent> <Plug>LocationPrevious :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> e[ <Plug>LocationPrevious
nmap <silent> e] <Plug>LocationNext
答案3
由于:lnext
等的输入很繁琐(你通常希望快速迭代它们,因此unimpaired.vim - 方便的括号映射对插件提供(除其他外)短]l
映射。
答案4
允许从第一个错误位置回绕到最后一个错误位置(反之亦然):
" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
try
lprev
catch /:E553:/
lfirst
catch /:E\%(42\|776\):/
echo "Location list empty"
catch /.*/
echo v:exception
endtry
endfunction
" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
try
lnext
catch /:E553:/
lfirst
catch /:E\%(42\|776\):/
echo "Location list empty"
catch /.*/
echo v:exception
endtry
endfunction
这将捕获以下错误:
E42: No Errors
E776: No location list
并温和地说道:Location list empty
(归功于lcd074)