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.