进入neovim终端面板时如何进入插入模式?


16

我具有以下映射,可以很容易地从neovim中移出终端面板:

tnoremap <C-h> <C-\><C-n><C-w>h
" Workaround since <C-h> isn't working in neovim right now
tnoremap <C-w>h <C-\><C-n><C-w>h
tnoremap <C-j> <C-\><C-n><C-w>j
tnoremap <C-k> <C-\><C-n><C-w>k
tnoremap <C-l> <C-\><C-n><C-w>l

唯一的问题是,当我返回到终端窗格时,必须按下i才能回到插入模式。当我进入运行终端的neovim窗格时,我总是希望它处于插入模式。实现此目标的最佳方法是什么?

Answers:


18

终端缓冲区名称始终以term://

autocmd BufWinEnter,WinEnter term://* startinsert

请注意,无论您离开窗口时使用的是哪种模式,当您移至终端窗口时,都将始终使您处于插入模式。


您也可以使用类似的自动命令在离开终端窗口时始终返回正常模式,无论您如何离开此窗口:

autocmd BufLeave term://* stopinsert


使用此解决方案,我会遇到问题。您知道解决方法吗?
Rastapopoulos

BufEnter自动命令看起来不会有这个问题。
Rastapopoulos '18

3

进入终端缓冲台buftype终端,你可以实际使用这个代替:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif

截至本文,我发现:startinsert不适用于本地vim 8终端。实际上明确指出:help terminal:“:startinsert无效”。我发现它exec 'normal! i'可以代替。
凯文(Kevin)

1
“截至本文,我发现:startinsert不适用于本地vim 8终端。” 真伤心 Vim有很多可以从NeoVim中学习的东西。
trusktr

0

甚至更好一点:

  function! TerminalOptions()
    " /* folded code */
    silent au BufEnter <buffer> startinsert!
    silent au BufLeave <buffer> stopinsert!
  endfunction
  au TerminalOpen * call TerminalOptions()

其中<buffer>会使au命令在本地应用,因此仅适用于termal缓冲区类型。这对于仅更改终端的设置也很有用。如从相线到绝对SWTICH)

另外..... :startinsert即使所有文档都指向该页面,我也无法上班。我必须执行以下操作:

    au BufEnter <buffer> exec "normal i"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.