Vim Syntastic中的错误位置导航


11

我已经在Vim中安装了Syntastic,并且可以完美地发现错误(主要是在我正在研究的Python代码中)。如果我在文件中正常跳转,当光标在相关行上时,我会在状态栏中看到错误。

我不知道的是如何在错误之间直接导航。

我知道syntastic会将错误加载到Vim位置列表中,并且可以通过将其显示出来:lopen,切换到该窗口,选择一行,然后单击Enter并转到右侧的主窗口。

我想做的是,没有打开列表,只需在文件中编辑错误并单击键盘快捷键以跳至下一个警告/错误的位置即可。

那可能吗?这些文档建议:lNext与:lprevious相关,但他们让我受益E553: No more items。

Answers:


12

:lne[xt]并且:lp[revious]是正确的快捷方式。

但这:lN[ext]并不相同:lne[xt]:它是的替代方案:lp[revious]。

您收到的消息是由于以下事实:当您遇到最后一个或第一个错误时,这些命令不会环绕。

您在问题中列出的命令都跳到上一个错误,但是很可能您已经在第一个错误上,之前没有任何内容。使用正确的命令,请记住它们不会缠绕在一起,您会很好。

阅读:h location-list完整的命令列表。


有没有办法让它们包起来?
— BallpointBen

不,没有办法让它们包起来。尽管此线程中有各种基于包装的解决方案,但更多形式为插件。我自己的插件vim-qf有那些。如果您不想要仅用于几个映射的完整插件,则可以在此处实现。
— romainl

6

如果列表中只有一个问题,:ll将导航至该问题。

这是您的.vimrc的修复程序,它将使键映射到只有一个问题的情况下,:lnext并且:lprev可以正常工作(跳到该问题)。将末尾的映射更改为您喜欢的键序列。

(来自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

如果在首次填充位置列表之前执行填充,或者在填充之后没有错误,则执行此操作很难看。请参阅我的答案以解决问题。
— 汤姆·黑尔



0

允许从第一个错误位置到最后一个错误位置进行回绕(反之亦然):

" 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)


实际上,有一个重复性较小的解决方案,但是可以使用echo“ Location list empty”。
— 汤姆·黑尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.