是否可以使用终端在 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
有没有办法在 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