是否可以将命令的输出重定向到快速修复窗口?
我正在运行的命令是
:!java %:r
Run Code Online (Sandbox Code Playgroud)
并希望输出进入quickfix窗口
请注意,quickfix窗口用于特定输出(例如编译器或语法检查工具),其中包括当前缓冲区的引用(即行号和列号).有很多的解决此基础设施:'makeprg','errorformat',等,通常捆绑成一个编译器插件.
虽然您可以将任意输出重定向到quickfix窗口,但是'makeprg'将外部程序的输出读取到新的临时缓冲区中它几乎没有什么好处(并且具有破坏的缺点),例如:
:new|0read !java #:r
Run Code Online (Sandbox Code Playgroud)
我建议使用以下两个选项之一:配置makeprg为您想要的运行java,或创建一个映射或命令来填充quickfix列表而不更改任何其他内容.
makeprg和编译插件makeprg正如其他人所说,我通常会为此设定选项.这不是一个黑客,这正是makeprg选项的用途.
唯一的问题是如果您还要运行另一个构建脚本.更通用的解决方案是创建一个简单的编译器插件.例如,在你的某个地方runtimepath,你可以创建一个文件compiler/java.vim并将其设置为如下所示:
if exists("current_compiler")
finish
endif
let current_compiler = "java"
CompilerSet makeprg=java
Run Code Online (Sandbox Code Playgroud)
现在,当您使用java时,您可以执行:compiler java,然后makeprg在当前窗口中根据需要设置.如果你想将它用于所有窗户,请使用:compiler! java,一声巨响.并非所有编译器插件都设置该makeprg选项,但您始终可以使用它重置它:set makeprg&.尝试:help write-compiler-plugin获取更多信息.
或者,您也可以使用cexpr填充quickfix列表.例如:
:cexpr system('java ' . shellescape(expand('%:r')))
Run Code Online (Sandbox Code Playgroud)
的expand扩大是必要'%:r'在表达式,并shellescape逸出,以便它可被用作一个参数外壳命令.然后将字符串'java '添加到转义路径,并将结果作为shell命令调用system.此命令的输出用于加载quickfix列表.
关于这一点的好处是它不会更改makeprg或任何其他设置,但仍然可以让您轻松填充quickfix列表.当然,您可能希望对此进行映射或为其定义自定义命令.
| 归档时间: |
|
| 查看次数: |
5491 次 |
| 最近记录: |