是否可以将命令的输出重定向到快速修复窗口?
我正在运行的命令是
:!java %:r
并希望输出进入quickfix窗口
答案 0 :(得分:8)
我建议使用以下两个选项之一:配置makeprg
以运行您想要的java,或者创建一个映射或命令来填充quickfix列表而不更改任何其他内容。
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
了解详情。
或者,您也可以使用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)
试试这个:
set makeprg=java
make %:r
这有点破解,当然假设您还没有将makeprg
用于实际的构建脚本。
答案 3 :(得分:0)
我映射了leader + j + r来运行我的java代码并通过执行
在quickfix窗口中显示它map <leader>jr :set makeprg=java <CR>:make %:r<CR>:copen<CR>