vim重定向输出到quickfix

时间:2013-08-07 23:33:25

标签: vim macvim

是否可以将命令的输出重定向到快速修复窗口?

我正在运行的命令是

:!java %:r

并希望输出进入quickfix窗口

4 个答案:

答案 0 :(得分:8)

我建议使用以下两个选项之一:配置makeprg以运行您想要的java,或者创建一个映射或命令来填充quickfix列表而不更改任何其他内容。

选项1:使用makeprg和编译器插件

我通常会为此设置makeprg选项,正如其他人所说的那样。这不是一个黑客,这正是makeprg选项的用途。

唯一的问题是,如果您还想运行另一个构建脚本。更通用的解决方案是创建一个简单的编译器插件。例如,在runtimepath的某个位置,您可以在compiler/java.vim下创建一个文件,并将其设置为以下内容:

if exists("current_compiler")
  finish
endif
let current_compiler = "java"

CompilerSet makeprg=java

现在,当您使用java时,可以执行:compiler java,然后在{em>当前窗口中根据需要设置makeprg。如果要将其用于所有窗口,请使用:compiler! java,然后使用。并非所有编译器插件都设置makeprg选项,但您始终可以使用:set makeprg&重置它。请尝试:help write-compiler-plugin了解详情。

选项2:创建命令

或者,您也可以使用cexpr填充quickfix列表。例如:

:cexpr system('java ' . shellescape(expand('%:r')))

expand是扩展表达式中'%:r'所必需的,shellescape将其转义,因此可以将其用作shell命令的参数。然后,字符串'java '被添加到转义路径中,结果将被system作为shell命令调用。此命令的输出用于加载quickfix列表。

关于这一点的好处是它不会更改makeprg或任何其他设置,但仍然可以让您轻松填充quickfix列表。当然,您可能希望对其进行映射或为其定义自定义命令。

答案 1 :(得分:7)

请注意,quickfix窗口用于特定输出(例如编译器或语法检查工具),其中包括对当前缓冲区的引用(即行号和列号)。这有很多基础设施:'makeprg''errorformat'等,通常捆绑在编译器插件中。

虽然你可以将任意输出重定向到quickfix窗口,但是在将外部程序的输出读入新的临时缓冲区(例如,...)时,它几乎没有任何好处(并且具有破坏'makeprg'的缺点)。像这样:

:new|0read !java #:r

答案 2 :(得分:3)

试试这个:

  1. set makeprg=java
  2. make %:r
  3. 这有点破解,当然假设您还没有将makeprg用于实际的构建脚本。

答案 3 :(得分:0)

我映射了leader + j + r来运行我的java代码并通过执行

在quickfix窗口中显示它
map <leader>jr :set makeprg=java <CR>:make %:r<CR>:copen<CR>