【问题标题】:Jump to the errors in the quickfix or location list for the current line in Vim (with Syntastic)跳转到 Vim 中当前行的快速修复或位置列表中的错误(使用 Syntastic)
【发布时间】:2021-09-17 22:37:41
【问题描述】:

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

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

【问题讨论】:

    标签: vim vim-plugin syntastic


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      但 Syntastic 实际上会在命令行中回显与当前行相关的错误消息。 This feature is enabled by default.

      【讨论】:

      • Syntastic 会将第一条错误消息回显到命令行,但通常该消息会被截断;因此我想自己跳到位置列表中的错误。 Syntastic 可以根据缓冲区中的当前行检索错误消息这一事实提供了希望,可以从缓冲区跳转到位置列表中相应的错误行。
      • 不幸的是,没有这个命令。您应该在 Syntastic 的问题跟踪器上发布功能请求。
      • 如果您将命令行设置为使用 2 行,它将同时用于消息,这对截断有很大帮助。 “设置 cmdheight=2”
      【解决方案3】:

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

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

      【讨论】:

      • 谢谢你,它最初帮助了我。
      【解决方案4】:

      我试图在here 中添加此功能,结果是:

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

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

      【讨论】:

        【解决方案5】:

        :caf 转到光标后的错误,如果您不介意将光标移回然后使用它,这将非常有效。

        您可能会进行映射以将光标移回然后:caf,但处理边缘情况(例如错误是文件的第一个字符时)可能会使它稍微复杂一些。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-27
          • 1970-01-01
          • 2020-06-20
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 2013-05-17
          • 1970-01-01
          相关资源
          最近更新 更多