在拆分窗格中打开shell命令的输出


23

考虑任何解释型编程语言。

我可以使用来运行当前打开的脚本! interpreter %,并在执行完成后使用return键返回到vim。

是否有可能不将当前窗口替换为已执行的shell命令的输出,而是在新的拆分窗格中打开输出?我仍然希望在执行脚本的过程中看到源代码。

我尝试过:split ! interpreter %,但是没有用。

有办法吗?我正在使用vim 7.3。

Answers:


29

使用:!,外部命令在shell中执行,而短暂的输出则不会在Vim内部捕获。您只需要看到打印到终端的内容,然后在外部命令完成后,控制权返回Vim。

要保留输出,您必须将其读入Vim 缓冲区。为此,有:read!命令。要打开新的暂存缓冲区,请将其与:new

:new | 0read ! <command>

如果要将当前缓冲区的文件名(%)传递给外部命令,则必须使用:execute,以便已在当前缓冲区中对其进行求值:

:execute 'new | 0read ! interpreter' expand('%')

或者,您使用以下事实:使用新缓冲区,前一个缓冲区将成为备用缓冲区,并使用#代替%

:new | 0read ! interpreter #

使用摆脱暂存缓冲区:bdelete!

如果要在执行过程中异步查看输出,则需要一个外部多路复用器或一个插件,如@chaos答案中所述。


上面的“:execute ...”命令对我有用,但是当我尝试将其绑定到F9击键时,请使用此.vimrc条目[nnoremap <buffer> <F9>:execute'new | 0read!/ usr / bin / env python3'expand('%')],出现以下错误:[/ bin / bash:-c:第0行:寻找匹配的'''expand('%'时出现意外的EOF )]。我尝试了几种转义序列,但我猜不是正确的序列。= :)。有任何想法吗?谢谢。
NYCeyes

2

据我所知,您无法在中执行此操作vim。但是screen为此使用终端多路复用器。在打开vim之前,启动多路复用器:

screen

然后按ctrl- a S水平,和ctrl- a |垂直溢出屏幕。

现在,vim在一个分割屏幕中打开一个文件。并使用ctrl- 跳到另一个屏幕a tab。请注意,在第二个屏幕中,您必须先打开一个新屏幕(ctrl- a c),然后才能使用它。

在带有vim的屏幕中,您可以编辑文件,在另一个屏幕中,您可以执行该文件并永久查看消息和代码。

这里一个快速参考screen


另外,您可以使用tmux多路复用器和vim-dispatch插件自动在窗格之间进行拆分和跳转。
taketwo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.