【问题标题】:How can I prevent vim bash commands from using the full screen?如何防止 vim bash 命令使用全屏?
【发布时间】:2019-01-10 06:59:50
【问题描述】:

当我从 vim 窗口内执行 bash 命令时,命令的结果会占据整个屏幕,并且代码会消失。我希望命令的结果只占用它需要的屏幕空间。这可能吗?为了澄清我正在使用命令

:!echo "my command"

我熟悉多个终端窗口、tmux 和 iterm。如果可能的话,我真的只是希望能够在没有额外插件的情况下在 vim 窗口中完成。

【问题讨论】:

  • 我不知道。但是你可以在 Vim 的窗口中打开一个终端。您需要更高版本 8.0.693(推荐 8.1)。然后你执行 :terminal 并且你在一个拆分窗口中有 bash (或其他)。
  • 不幸的是,我必须通过 ssh 连接到无法更新的机器。所以我在那里坚持使用 vim 7。
  • 您只是对此感到恼火,还是您有想要描述的用例?
  • 更多只是恼火,如果无需安装任何东西或处理多个窗口,就可以同时查看代码和结果。

标签: bash vim command


【解决方案1】:

Vim 将终端切换回原来的屏幕(你启动它的地方); Vim 本身使用 alternate screen 来显示它的 UI,没有终端滚动条,也不会影响原始内容。没有办法绕过那个实现细节。

您可以使用 GVIM;由于它不在终端中运行,因此它带有自己的(粗略)终端仿真,并且它只是在命令行位置附加输出;原始窗口内容只是滚动出视图,为 shell 命令输出腾出空间。即使这样,在显示输出时也不能进行任何交互;确认提示后,输出就消失了。

在终端中,您已经提到了可能的替代方案。直接的解决方案是通过screentmux 拆分终端窗口,然后让Vim 在一个窗口中运行,shell 命令在另一个窗口中运行。这里最大的优势是您可以并行工作并来回切换。

从 Vim 8.1 开始,Vim 内置了基本的终端多路复用;即您可以在 Vim 窗口中使用 :terminal 启动终端,然后使用默认窗口命令在 Vim 中切换。

对于 Vim 7,不使用外部终端多路复用器,您所能做的就是在暂存缓冲区中捕获 shell 命令的输出:

:new | 0read !{bash-command}

这是基本配方;您可以使用暂存缓冲区命名、关闭时自动删除缓冲区等来扩展它。详情请见this Vim Tips Wiki page

这适用于不需要很长时间执行的非交互式命令;您看不到实时输出,也看不到您输入的内容。

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多