如何在快速修复窗口中浏览任意随机命令的输出?

6
我想运行一些$RANDOM_COMMAND,并将结果打开(通过“传输到”)快速修复窗口(:copen/:cfile)。是否有可能在不必在vimrc中定义某些命令的情况下完成这项工作?(希望以一种“简单”的方式完成,即我希望能够记住这个操作,以便在必须登录的任何新随机框中运行它。)
编辑:最初不知道如何更准确地表达“简单的方式”,但现在我至少知道了部分内容:我更喜欢1或2行答案
编辑2:尝试以下内容(来自此处此处
:call setqflist(split(system('RANDOM_COMMAND'), '\n'))
:copen

但似乎无论如何都不起作用 :/ (并且非常丑陋)

2个回答

6

能否通过Vim EX模式命令(如:ls)填充Quickfix窗口?Quickfix窗口中包含所有打开缓冲区的列表? 我尝试了cexp ":execute ls",但它不起作用。需要一些关于Vim脚本的帮助。 - avimehenwal

4

实现这一目标的一种方法:

:set makeprg=$RANDOM_COMMAND
:make
:copen

或者,执行命令并将输出捕获到临时文件中:

:! $RANDOM_COMMAND > out
:cfile out
:copen

无论如何,输出必须与“errorformat”设置匹配,以便Vim可以解析文件名和行号(如果您需要这些内容;但否则,您也可以使用临时缓冲区以及快速修复列表)。
【编辑】一些改进
为了使其成为一个单行代码,并且有所缩短,您可以:
:set mp=RANDOM_COMMAND | make | copen

命令中的空格必须使用反斜杠进行转义;此外,make 命令可以带参数,在 $* 的位置进行扩展。以下是更具体的示例:
:set mp=mycommand\ -d\ $PWD\ $* | make myarg | copen

或者也可以使用:set grepprg:grep来完成类似的操作,这样可以更简洁:

:set gp=mycommand\ -d\ $PWD\ $* | gr myarg | copen

嗯,我找到了这两个,但它们对我来说都太长了,只是我不知道如何表达这一点;现在看到你的答案,我想我知道了:我更喜欢一个1行或最多2行的答案... 最理想的是像 :! $RANDOM_COMMAND | :copen 这样的东西... - akavel
嗯,你能否把所有的命令都在一行中输入,类似于:set makeprg=$FOOBAR ; :make ; :copen或其他什么的? - akavel
1
当然:set makeprg=$FOOBAR|exe 'make'|copen - Ingo Karkat
非常感谢!起作用了。我会自己编辑您的答案,以添加我需要的更多细节。此外,我理解我只能使用反斜杠转义空格? - akavel
嗯,根据其他答案,我认为 | exe 'make'| 缩写成 | make | 也应该可以工作,对吗? - akavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接