8

我开始使用 Vim 的Syntastic 插件,它将在当前缓冲区上运行语法检查器,然后指示任何有错误的行。我可以使用 将错误列表作为位置列表打开:Errors,然后通过点击 跳转到给定错误的行Enter,这将跳转到缓冲区中包含错误的行。

我想知道如何做相反的事情。我想从缓冲区中标记有语法错误的行转到位置列表中的相应条目,以便我可以阅读列表中的完整错误消息。我怎样才能做到这一点?我知道这:ll [n]会跳转到n列表中的第 th 个错误,但通常我不会确切知道哪个错误号对应于缓冲区中的给定行。但是,我找不到接受行号而不是错误号的命令。

4

5 回答 5

9

没错,没有内置方法可以找出当前光标位置或之后的错误,尽管这通常很有用。我为此编写了QuickFixCurrentNumber 插件

通过g<C-q>映射,您可以转到当前光标位置的快速修复/位置列表中的项目(或光标之后的下一个项目)。它还提供[q/]q映射以跳转到上一个/下一个错误,同时将导航限制为当前缓冲区中的错误。

于 2013-02-19T12:11:44.297 回答
3

我认为这是不可能的,至少使用默认的 Vim 命令或 Syntastic 是不可能的。

但 Syntastic 实际上会在命令行中回显与当前行相关的错误消息。默认情况下启用此功能。

于 2013-02-08T20:05:08.957 回答
2

我刚刚为我的 :Man 查看器创建了这个。它在导航时跟踪“位置列表”窗口中的当前项目:

function! s:visibleLoc()
   return len(filter(getwininfo(), {i,v -> v.loclist}))
endfunc

function! s:followLine()
   let curLine = line(".")
   if (exists("b:lastLine") && b:lastLine == curLine) || 0 == s:visibleLoc()
      return
   endif
   let b:lastLine = line(".")
   let ent = len(filter(getloclist("."), {i,v -> v.lnum <= curLine}))
   if ent < 1 || (exists("b:lastEntry") && b:lastEntry == ent)
      return
   endif
   let b:lastEntry = ent
   let pos = [ 0, curLine, col("."), 0 ]
   exe "ll ".ent
   call setpos(".", pos)
endfunc

au CursorMoved <buffer> call <SID>followLine()
于 2017-10-15T10:55:56.503 回答
0

我试图在此处“使用”此功能,结果是:

vim-loclist-follow:
https://www.vim.org/scripts/script.php?script_id=5799
https://github.com/elbeardmorez/vim-loclist-follow

Nothing fancy, it just ensures the 'nearest' item is selected. Works for me (™️) using either of my Syntastic, or now Ale, setups.

于 2019-06-16T22:16:29.213 回答
0

:caf goes to the error after the cursor, which works pretty well if you don't mind shifting your cursor back and then using it.

You could probably make mappings to move your cursor back and then :caf but dealing with the edge cases like when error is the first character of the file might make it slightly complex.

于 2021-09-17T14:37:41.287 回答