跳转到Vim中当前行的quickfix或位置列表中的错误(使用Syntastic)

时间:2013-02-08 18:01:17

标签: vim vim-plugin syntastic

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

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

但Syntastic实际上回应了与命令行中当前行关联的错误消息。 This feature is enabled by default.

答案 2 :(得分:1)

我刚刚为我创建了这个:Man viewer。它跟踪&#39;位置列表中的当前项目。导航时的窗口:

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

答案 3 :(得分:0)

我试图在here中使用此功能,结果是:

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

没什么,只是确保选择了“最近”项。使用我的Syntastic或现在的Ale设置为我工作(™️)。