Vim 8.1 以后支持 :terminal 命令在 Vim 中直接打开独立的窗口运行终端程序。我做了一个插件,使得打开/关闭这个独立的终端窗口更方便一点。

这个插件主要功能的流程如下:

graph LR;
    button(按下快捷键)
    checkInitial{终端窗口是否已初始化}
    checkOpen{终端窗口是否已显示}
    initial(初始化终端窗口)
    close(隐藏终端窗口)
    open(打开终端窗口)
    
    button-->checkInitial;
    checkInitial-->|否|initial;
    checkInitial-->|是|checkOpen;
    initial-->open;
    checkOpen-->|否|open;
    checkOpen-->|是|close;

以下全局变量供自定义设置

let g:TerWinSize = 10
let g:TerWinCmd = &shell 
let g:TerWinBufName = 'TerWin'
let g:TerWinLocation = 'botright'
  • g:TerWinSize 每次打开终端窗口时,终端窗口的高度都会是这个值
  • g:TerWinCmd 初始化终端窗口时执行的命令,默认设置的 &shell
  • g:TerWinBufName 初始化终端窗口时,为终端窗口中的 buffer 设置的名称,它是插件检查终端窗口是否已经初始化的依据
  • g:TerWinLocation 每次打开终端窗口时的位置

因为插件是通过检查 buffer 的名称是否存在来判断终端窗口是否有过初始化,也通过这个 buffer 所在窗口的可见性来判断终端窗口是否打开。所以在同一个 Vim 程序实例中,插件只会初始化一次终端窗口。

通过插件提供的唯一命令来打开/关闭终端窗口

:TerWinToggle

还是设置快捷键来调用插件命令比较方便

noremap <F5> :TerWinToggle<CR>
tnoremap <F5> <C-W>:TerWinToggle<CR>

vim-terwin 源码在 https://github.com/lkebin/vim-terwin