如何在quickfix窗口中浏览任何随机命令的输出?

时间:2014-08-01 15:08:14

标签: vim

我想运行一些$RANDOM_COMMAND,并在quickfix窗口(:copen / :cfile)中打开(“通过管道”)结果。这是可能的,而无需在vimrc中定义一些命令吗? (希望以某种“简单的方式”,即我希望能够记住这一点,所以我可以在任何带有vanilla vim的新随机盒子上运行它,我必须登录。)

编辑最初不知道如何更准确地表达“简单方式”,但现在我至少部分地知道了:我更喜欢答案1,最多2线

edit2:尝试过以下(来自thisthis

:call setqflist(split(system('RANDOM_COMMAND'), '\n'))
:copen

但似乎无论如何都不起作用:/( mucho 丑陋)

2 个答案:

答案 0 :(得分:2)

一种方法:

:set makeprg=$RANDOM_COMMAND
:make
:copen

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

:! $RANDOM_COMMAND > out
:cfile out
:copen

无论如何,输出必须与'errorformat'设置匹配,以便Vim可以解析文件名和行号(如果需要那些;但除此之外,你也可以使用暂存缓冲区) quickfix list)。

[编辑]一些改进

要使其成为 oneliner ,然后稍微缩短,您可以:

: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 :(得分:0)

嗯,最后通过阅读regular vimdoc for quickfix window找到了最简单的解决方案:

:cex system('$RANDOM_COMMAND') | copen

| copen部分是可选的)。

仍然,Ingo Karkat's solution可以具有可用性优势,因为在连续运行中它足以缩短运行时间:grep那里。