许多消息来源表明,运行“bang”命令(例如:! wc %
)将在编辑器窗口下方的Vim中显示结果。 (例如,this tip sheet表明这是预期的行为。)
具体来说,我跟随着Tim Pope的Fugitive插件的this Vimcast tutorial,并且Drew Neil表示运行:Git
命令将允许用户从Vim内部运行任意git命令 - 并且命令的输出将显示在屏幕底部的Vim中。
这是不我遇到的行为。相反,我的Vim会话本质上被发送到后台,然后我会弹回我的终端以查看输出。这一切都非常迷惑 - 特别是因为我失去了我的Vim会话提供的有用的视觉上下文,包括生成输出的“bang”命令。
如果Vim确实在编辑器窗口下方显示Vim中的外部生成输出,我会喜欢它。我找到了一些similar types of questions,但是在所有这些中,用户想要将内容输出到新的缓冲区,而不是只是在编辑器窗口的底部看到它。换句话说,我没有发现其他人描述我所看到的行为。
我能够在gVim中获得所需的行为,但gVim并不总是一个可行的选项,所以我想知道是否有更广泛的解决方案可以允许基于终端的Vim中的预期行为。 / p>
我在Ubuntu 16.04上使用Vim 8.0。我的终端是带有zsh shell的gnome-terminal。我在我的机器和bash shell上尝试了一些其他终端,无论我使用哪种组合,我都会遇到这种情况。
以下两个屏幕截图展示了我所看到的行为。左边是基于终端的Vim,右边是gVim。请注意如何在右侧的gVim中运行:! wc %
具有预期/期望的行为,而不是在左侧的regualar Vim中运行。
运行命令之前的屏幕截图:
运行命令后的屏幕截图:
还有其他人遇到这种情况吗?有没有其他人从他们的基于终端的Vim获得所需的行为? (也许这是所有某种文档疏忽,基于终端的Vim从未期望以预期的方式运行?)
谢谢!
答案 0 :(得分:1)
它的GVim(或MacVim)在窗口底部显示外部命令的输出,因为它带有一个非常最小的终端仿真器。普通的Vim无法做到这一点。
您可以通过任何提供tmux集成的Vim插件来模拟tmux的行为,或者,因为您使用的是Vim 8.0,新的内置:help :terminal
模拟器。
对于你的例子:
:term wc %
答案 1 :(得分:0)
我偶然发现的另一种方法是使用this plugin中的AsyncRun。它可以替代shebang命令,在后台运行命令,并将输出发送到quickfix窗口。
虽然我仍然认为接受的答案是正确的(即TUI Vim总是输出到终端shell而不是内部shell),但遇到此线程的其他人可能会发现AsyncRun是&#的更好替代品34;那就是它的运作方式"。