许多来源表明,运行“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中实现预期的行为。
我在Ubuntu 16.04上使用Vim 8.0。我的终端是gnome-terminal和zsh shell。我在我的机器和bash shell上尝试了一些其他终端,无论使用哪种组合,我都遇到了这种行为。
这里有两个屏幕截图,演示了我看到的行为。左边是基于终端的Vim,右边是gVim。请注意,运行:! wc %
在右边的gVim中具有预期/所需的行为,但在左边的正则Vim中却没有。
运行命令前的屏幕截图:
运行命令后的屏幕截图:
还有其他人经历过这种情况吗?其他人是否从基于终端的Vim中获得了所需的行为?(也许这都是某种文档的疏忽,基于终端的Vim从来没有被期望以期望的方式运行?)
谢谢你,谢谢
3条答案
按热度按时间z2acfund1#
它是GVim(或MacVim),在窗口底部显示外部命令的输出,因为它带有一个非常小的终端模拟器。普通的Vim做不到这一点。
您可以通过任何提供tmux集成的Vim插件来模拟tmux的行为,或者使用新的内置
:help :terminal
模拟器(因为您使用的是Vim 8.0)。例如:
aij0ehis2#
我偶然发现的一个替代方案是从this plugin使用AsyncRun。它作为shebang命令的替代,在后台运行该命令,并将输出发送到quickfix窗口。
虽然我仍然认为公认的答案是正确的(即。TUI Vim总是输出到终端shell而不是内部shell),遇到这个线程的其他人可能会发现AsyncRun是一个更好的替代品,“这就是它的工作方式”。
gev0vcfq3#
其实我在打错字的时候偶然发现了一个简单的解决方案:
:w !wc %
在
!
之前使用:w
命令,它将显示shell命令的结果(命令后面的命令!)在编辑器窗口下面的Vim中,甚至在Plain Vim中(我使用的是VIM - Vi IMprove 9. 0)。一些示例用例:
:w !clang % -o %<&&./%<
或:w !gcc %&&./a.out
将编译/执行当前的C文件(显示执行C程序的结果)在编辑器下面等待你按回车键。这是一个非常简洁的工作流程。如果您的项目包含多个文件,请使用:make
命令。!
将从Vim执行shell命令。%
是当前在Vim中打开的文件的名称。&&
是逻辑AND,它可以让你链接多个命令。<
将删除文件的扩展名,因此%<
是没有扩展名的当前文件的名称。PS:我不知道为什么这个工作或即使它是好的做法,我只看了
:w
保存文件之前,这一发现,如果任何一个可以启发我的评论,我会很高兴.