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

muf*_*fel 24 vim

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

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

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

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

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

Ing*_*kat 29

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

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

:new | 0read ! <command>
Run Code Online (Sandbox Code Playgroud)

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

:execute 'new | 0read ! interpreter' expand('%')
Run Code Online (Sandbox Code Playgroud)

或者,您使用这样一个事实,即使用新缓冲区,前一个缓冲区成为备用缓冲区,并使用#代替%

:new | 0read ! interpreter #
Run Code Online (Sandbox Code Playgroud)

删除暂存缓冲区:bdelete!

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