有没有办法在vim中显示最后一个命令的输出?

Vit*_*ner 43 vim

当我运行一个shell命令时,它要求在结尾处输入ENTER,一旦你输出,就会隐藏输出.有没有办法再次看到它而没有再次运行命令?

还有一些内部命令make也运行外部命令,那些甚至不会停止为ENTER所以如果我的'编译器'设置中有错误,命令会在屏幕上闪烁太快而无法看到它.如何查看命令及其输出?(quickfix为空)

UPDATE

输出肯定还在那里.至少在终端vim上.如果我打字

:!cat
Run Code Online (Sandbox Code Playgroud)

上一个命令的输出仍然存在.问题是a)它似乎太像一个黑客,我正在寻找一个适当的vim方式b)它不适用于gui vim

小智 59

只需键入:!或者您可以尝试SingleCompile


hol*_*eek 35

将vim放入背景通常对我有用(按Ctrl + Z).

这将显示你从vim开始的shell,在我的情况下,我可以通过":!somecommand"查看我在vim中运行的所有命令的输出.

这假设您从shell运行vim,而不是gui one(gvim).

  • 在shell中输入"fg",将背景的vim带回前台 (9认同)
  • 按Ctrl + Z后如何返回Vim? (2认同)

sid*_*yll 23

在执行命令之前,您可以将输出重定向到文件,寄存器,选择,剪贴板或变量.对我来说,重定向到寄存器是最实用的解决方案.

要开始重定向到注册a,请使用

:redir @a
Run Code Online (Sandbox Code Playgroud)

然后你运行你的命令,比方说

:!ls -l
Run Code Online (Sandbox Code Playgroud)

并结束重定向

:redir END
Run Code Online (Sandbox Code Playgroud)

就是这样,register a现在包含重定向命令的输出.您可以像使用寄存器一样使用:reg a或放入缓冲区"ap.

阅读帮助:redir以了解有关重定向的各种方法的更多信息.


几个月后,我找到了一个你可能有兴趣看看的帮助文件:messages.txt.

虽然不完整,但它有很大帮助.有一个命令(对我来说是新的)g<,显示给出的最后一条消息,但显然只有Vim消息,如[No write since last change].

首先,我建议你看一下你的设置'shm',并尝试让你的命令输出更持久(更多地出现"命令输入").然后,检查这个帮助文件是否有帮助:-)我无法让它100%工作,但是是一个很大的进步.

  • 这是一个很长的路要走.它要求我在运行命令之前记住要做redir.我很肯定我记得有一种方法可以显示最后一个命令输出.它应该被保存在某个地方. (2认同)

Sed*_*rik 8

我通常使用退出到shell :sh,它将显示已执行的所有命令的输出,并且没有重定向它的输出.

只需关闭外壳,您就会回到vim内部.


Ray*_*Luo 7

为什么我不再使用:!了,还有什么替代方法

:!当前选择的答案中学习了(我赞成)。从某种意义上说它确实显示了前一个屏幕,它仍然有效。

但是,前一天,我学习了:!!用于重新运行最后一条命令的另一条技巧(顺便说一句,当您处于edit-test-edit-test -...循环中时,这非常有用)。然后我意识到,用:!不知何故有忘记的最后一个命令的副作用,这样以后:!!就不会工作。那不酷。

在深入研究vim的文档之前,我不理解这一点。

:!{cmd}用shell执行{cmd}。

任何 '!' {cmd}中的命令已替换为先前的外部命令

突然,一切开始变得有意义。让我们按以下顺序检查它:

  1. 假设你第一次运行:!make foo bar baz tons of parameters,看看它的输出,后来回来活力。
  2. 现在你可以运行:!!,第二个!将与前一个外部命令所取代,所以你会遇到make foo bar baz tons of parameters一个更多的时间。
  3. 现在,如果您运行:!,vim仍会将其视为“启动(新的)外部命令”,只是该命令原来是EMPTY。所以你键入一个空的命令(即击球正常壳内ENTER一次),这相当于。通过将画面切换到外壳,你碰巧有机会看到先前的画面输出。而已。
  4. 现在,如果你运行:!!,vim会重复前面的命令,但这个时候,前面的命令是一个空的命令。这就是为什么你的vim失去了记忆make foo bar baz tons of parameters,这样下次你想打,你将不得不再次输入。

那么,接下来的问题将是,是否有任何其他的“纯VIM命令”,只显示不搞乱的最后一个命令存储器中的上壳输出?我不知道。但是现在我准备使用CTRL+ Z将vim带入后台,因此显示具有先前命令输出的shell控制台,然后键入fgENTER切换回vim。FWIW,该CTRL+Z溶液实际上需要比少一个关键笔划:!溶液(这需要shift+ ; shift+ 1 ENTER显示命令屏幕,以及ENTER回来)。