是否可以使用终端在Vim/Vi中拆分窗口?

nad*_*gam 10 vi vim

有没有办法在Vi/Vim内部拆分窗口,以便一个窗口成为终端?

PS解决方案,如安装新的文本编辑器等,对我没有帮助.

Jak*_*keD 16

在Vim 8中,如果使用该+terminal选项进行编译,则可以水平拆分当前窗口并使用命令添加终端:terminal:term用于简写.

在此输入图像描述

如果你想垂直分割窗口,我知道的最好的方法是用:vsp或用常规垂直分割<c-w>v.然后,拆分其中一个窗口以具有终端窗口(:term),然后最终移动到较小的非终端窗口并关闭它.

在此输入图像描述

编辑:...在我写完这篇文章之后,我发现如何轻松地垂直拆分终端窗口......

:vertical terminal

" OR

:vert term
Run Code Online (Sandbox Code Playgroud)

终端将以类似于插入模式的方式打开,按下<c-w>N将使您进入"正常"模式,您可以在其中定期进行Vim运动并运行Vim命令.请注意,在许多shell中(我在Bash和Zsh中肯定都知道),你可以运行set -o vi以便能够击中<c-[><esc>使用Vim运动.关于它的最好的部分是v在"正常"模式下击中,其中当前命令在新的Vim实例中打开并且在退出Vim时运行.

  • @Georg 最快的方法是像平常一样在 bash 提示符下执行 Ctrl+D 。 (3认同)

unc*_*nch 11

也许添加字符串

rightb vert term
Run Code Online (Sandbox Code Playgroud)

或者

bel vert term
Run Code Online (Sandbox Code Playgroud)

到您的.vimrc(带有编辑器设置的隐藏文件;默认情况下位于主目录中:~/.vimrc)将解决您的问题。因此,如果您输入vim file_name.txt终端,您将有两个拆分窗口:左侧 - 您的 txt 文件,右侧 - 终端窗口。

ps:您可以使用 ctrl + 双“w”(按“w”两次)在拆分窗口之间移动。

此外,根据我的经验,与 8.2 版本不同,8.0 vim 版本不支持“term”-命令。


lwa*_*ink 7

没有插件就没办法做到这一点.以下是获得类似功能的几种方法.

  • 使用tmux或其他终端窗口管理器.为了回应你的Ps,tmux不是另一个文本编辑器.它只允许您拆分终端屏幕,因此您仍然可以使用vim进行文本编辑.
  • 您还可以运行终端命令并查看vim内部的输出.只需运行一个命令,但前面加上一个感叹号.例如,如果:!ls从vim内部运行,您将看到当前目录中的文件列表.任何其他命令,如:!pwd:!git add *将也可以.如果要将命令的输出读入当前的vim缓冲区,可以使用read命令.例如,如果运行:read !lsvim,则会将当前目录中的文件列表输入到光标位置的当前缓冲区中.

  • 这不应该再是公认的答案。请参阅 @JakeD 的“:垂直终端”答案:/sf/answers/3598240621/。 (6认同)

jef*_*d.m 7

对于任何使用NeoVim 的人任何人:

得票最高的答案使用 vim 命令。这在 NeoVim 上不起作用(至少对我来说)。然而,它仍然相当简单:

:vsplit term://bash

term://是 NeoVim 打开终端的方式

bash是你想要使用的 shell 类型(例如我使用 zsh,所以我的命令实际上是:tabe term://zsh

我创建的一些有用的命令:

" open terminal
if has('nvim')
    command Terminal vsplit term://zsh
    command TerminalTab tabe term://zsh
else
    command Terminal vert term
    command TerminalTab tab ter
endif
Run Code Online (Sandbox Code Playgroud)

  • 请注意,分割窗口将处于正常模式,按“i”进入终端模式,按“CTRL+\ CTRL+N”离开并返回正常模式 (2认同)