【问题标题】:How to display Vim "bang" output below editor window instead of popping out to terminal?如何在编辑器窗口下方显示 Vim “bang” 输出而不是弹出到终端?
【发布时间】:2018-08-14 22:31:40
【问题描述】:

大量消息表明,运行诸如:! wc % 之类的“bang”命令将在 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。我的终端是带有 zsh shell 的 gnome-terminal。我在我的机器和 bash shell 上尝试了一些其他终端,无论我使用哪种组合,我都遇到了这种行为。

这里有两个屏幕截图展示了我所看到的行为。左边是基于终端的 Vim,右边是 gVim。请注意运行 :! wc % 如何在右侧的 gVim 中具有预期/期望的行为,但在左侧的常规 Vim 中却没有。

运行命令前的截图:

运行命令后的截图:

还有其他人遇到过这种情况吗?有其他人从他们基于终端的 Vim 中获得所需的行为吗? (也许这都是某种文档监督,而基于终端的 Vim 从来没有期望以期望的方式运行?)

谢谢!

【问题讨论】:

  • :r! command 将读取命令输出并将输出插入到当前缓冲区的光标位置。
  • 是的,这是我在问题中链接到的类似问题之一的解决方案。这似乎并不等同于暂时在屏幕底部显示它,因为我必须撤消写入当前缓冲区的输出(或者如果我将其发送到拆分或选项卡中的新缓冲区,那么我需要删除它发送到的缓冲区)。
  • 您似乎想在 quickfix 窗口上显示外部命令输出。我很久以前也搜索过,但找不到很好的解决方案。 vim 只允许有限的命令,例如 make 或 grep 输出到 quickfix 窗口。

标签: vim terminal


【解决方案1】:

它是 GVim(或 MacVim),它在窗口底部显示外部命令的输出,因为它带有 very 最小的终端仿真器。普通的 Vim 无法做到这一点。

您可以通过提供 tmux 集成的许多 Vim 插件中的任何一个使用 tmux 模拟该行为,或者由于您使用的是 Vim 8.0,因此可以使用新的内置 :help :terminal 模拟器。

你的例子:

:term wc %

【讨论】:

  • 感谢您在 Vim 8.0 中分享这个新功能,我在 Vim 8.0 上测试过,它可以工作,顺便说一下,:terminal 命令的短格式是:ter,而不是@987654325 @
  • 啊,感谢您确认这是 gVim/MacVim 功能。这是有道理的,因为 Drew Neil 似乎使用 MacVim,他的 vimcast 是我了解 Vim 功能的主要方式之一。 :term wc % 肯定比使用“bang”命令弹出到终端更好。谢谢你的提示! (太糟糕了,它不适用于带有终端输出的插件命令,例如来自 Fugitive 插件的:Glog。不过,总比没有好。:-)
【解决方案2】:

我偶然发现的另一种方法是使用来自this plugin 的 AsyncRun。它作为 shebang 命令的替代,在后台运行命令,并将输出发送到 quickfix 窗口。

虽然我仍然认为公认的答案是正确的(即 TUI Vim 始终输出到终端 shell 而不是内部 shell),但遇到此线程的其他人可能会发现 AsyncRun 是“那是它是如何工作的”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多