我通过以下映射可以很容易地从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窗格时,我总是希望它处于插入模式。实现此目标的最佳方法是什么?

#1 楼

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

autocmd BufWinEnter,WinEnter term://* startinsert

请注意,无论您使用哪种模式,这都将始终使您在进入终端窗口时处于插入模式



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

autocmd BufLeave term://* stopinsert

评论


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

– Rastapopoulos
'18 Apr 19在10:18



BufEnter autocmd似乎没有此问题。

– Rastapopoulos
18年4月19日在10:49



#2 楼

输入终端缓冲区会将buftype设置为终端,实际上您可以使用它:

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


评论


我发现:startinsert不适用于本机vim 8终端。实际上,在:help终端中明确指出:“:startinsert无效”。我发现那个执行官很正常!我工作了。

–凯文
18-2-6在15:11



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

–trusktr
18 Mar 2 '18 at 3:52

#3 楼

在neovim上,您可以执行以下操作:

          autocmd TermOpen * startinsert


:help :terminal中找到。

#4 楼

甚至更好一点:

  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"