如何在编辑器窗口下方显示Vim“bang”输出而不是弹出到终端?

f87krz0w  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(172)

许多来源表明,运行“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从来没有被期望以期望的方式运行?)
谢谢你,谢谢

z2acfund

z2acfund1#

它是GVim(或MacVim),在窗口底部显示外部命令的输出,因为它带有一个非常小的终端模拟器。普通的Vim做不到这一点。
您可以通过任何提供tmux集成的Vim插件来模拟tmux的行为,或者使用新的内置:help :terminal模拟器(因为您使用的是Vim 8.0)。
例如:

:term wc %
aij0ehis

aij0ehis2#

我偶然发现的一个替代方案是从this plugin使用AsyncRun。它作为shebang命令的替代,在后台运行该命令,并将输出发送到quickfix窗口。
虽然我仍然认为公认的答案是正确的(即。TUI Vim总是输出到终端shell而不是内部shell),遇到这个线程的其他人可能会发现AsyncRun是一个更好的替代品,“这就是它的工作方式”。

gev0vcfq

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保存文件之前,这一发现,如果任何一个可以启发我的评论,我会很高兴.

相关问题