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

Is it possible to split a window in Vim/Vi with a terminal?

有没有办法在 Vi/Vim 中拆分一个 window 以便一个 window 成为终端?

P.S。安装新的文本编辑器等解决方案对我没有帮助。

插件 conque_term 使您可以 运行 在 vim 缓冲区中创建 shell。

BUT 我推荐 screen linux command,当通过执行 Ctrl+a Esc

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

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

在Vim8中,如果是用+terminal选项编译的,可以把当前的window水平拆分,用命令:terminal或者添加终端:term 简写。

如果您想垂直拆分 window,我知道的最好方法是使用 :vsp<c-w>v 进行常规垂直拆分。然后,将其中一个 windows 拆分为终端 window (:term),最后移动到较小的非终端 window 并关闭它。

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

:vertical terminal

" OR

:vert term

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

也许添加字符串

rightb vert term

bel vert term

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

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

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

任何使用 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