如何使用任意 linter 输出填充 Vim/Neovim 的 quickfix 列表或位置列表?
How to populate the quickfix list or location list of Vim/Neovim with arbitrary linter output?
假设我只是 运行 终端中的 linter,我有一堆标准格式的 linter 输出:
path/to/some/file.foo:45:23: This is an error message
path/to/some/file.foo:46:12: This is another error message
...
我目前正在 Neovim 中手动打开每个文件,导航到正确的行并修复问题。
相反,我想用这些信息填充 Vim 或 Neovim 中的快速修复或位置列表,这样我就可以快速跳转到每个位置并修复错误。
实现此目标的 simplest/quickest 方法是什么?
这就是 :help -q
command-line 标志的用途:
$ vim -q errorfile
您可以将 linter 的输出重定向到一个文件,然后将该文件传递给 Vim 的 -q
:
$ yourlinter file.foo > errorfile
$ vim -q errorfile
如果您的 shell 允许,您可以使用进程替换来删除中间步骤和 ghost 文件:
$ vim -q <(yourlinter)
或者,如果你已经 运行 你的 linter 并且忘记将它传递给 Vim,你可以 re-run 它并通过进程替换将它传递给 Vim:
$ vim -q <(!!)
由于这是我经常遇到的情况,我在几年前将此命令添加到我的 bash
配置中:
# open Vim with output of last command in quickfix
vimq() {
vim -q <($(fc -nl -1))
}
这让我可以做:
$ yourlinter file.foo
(output of linter)
$ vimq
注意:fc -nl -1
比 !!
更可移植——因此在脚本上下文中更可取——调用上一个命令的方法。参见 $ man fc
。
注意:您在问题中只提到了 quickfix list,但是,如果您还想要 quickfix window,您可以在命令中再添加一项::help :cwindow
.
$ vim -q <(!!) +cw
假设我只是 运行 终端中的 linter,我有一堆标准格式的 linter 输出:
path/to/some/file.foo:45:23: This is an error message
path/to/some/file.foo:46:12: This is another error message
...
我目前正在 Neovim 中手动打开每个文件,导航到正确的行并修复问题。
相反,我想用这些信息填充 Vim 或 Neovim 中的快速修复或位置列表,这样我就可以快速跳转到每个位置并修复错误。
实现此目标的 simplest/quickest 方法是什么?
这就是 :help -q
command-line 标志的用途:
$ vim -q errorfile
您可以将 linter 的输出重定向到一个文件,然后将该文件传递给 Vim 的 -q
:
$ yourlinter file.foo > errorfile
$ vim -q errorfile
如果您的 shell 允许,您可以使用进程替换来删除中间步骤和 ghost 文件:
$ vim -q <(yourlinter)
或者,如果你已经 运行 你的 linter 并且忘记将它传递给 Vim,你可以 re-run 它并通过进程替换将它传递给 Vim:
$ vim -q <(!!)
由于这是我经常遇到的情况,我在几年前将此命令添加到我的 bash
配置中:
# open Vim with output of last command in quickfix
vimq() {
vim -q <($(fc -nl -1))
}
这让我可以做:
$ yourlinter file.foo
(output of linter)
$ vimq
注意:fc -nl -1
比 !!
更可移植——因此在脚本上下文中更可取——调用上一个命令的方法。参见 $ man fc
。
注意:您在问题中只提到了 quickfix list,但是,如果您还想要 quickfix window,您可以在命令中再添加一项::help :cwindow
.
$ vim -q <(!!) +cw