¿Cómo ingresar al modo de inserción al ingresar al panel de terminales neovim?

16

Tengo las siguientes asignaciones para que sea más fácil salir de un panel de terminales en 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

El único problema es que cuando vuelvo al panel de terminales, tengo que presionar ipara volver al modo de inserción. Siempre quiero que esté en modo de inserción cuando me muevo a un panel de neovim que está ejecutando terminal. ¿Cuál es la mejor manera de lograr esto?

aharris88
fuente

Respuestas:

18

Un nombre de búfer de terminal siempre comienza con term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Tenga en cuenta que esto siempre lo pondrá en modo de inserción cuando se mueva a la ventana del terminal, independientemente del modo que estaba usando al salir de la ventana.


También puede usar un comando automático similar para volver siempre al modo normal cuando salga de la ventana del terminal, sin importar cómo salga de esta ventana:

autocmd BufLeave term://* stopinsert

Benoît Faucon
fuente
Con esta solución, experimento este problema. ¿Sabrías una forma de evitarlo?
Rastapopoulos
Las BufEntermiradas autocmd como que no tienen este problema.
Rastapopoulos
3

Al ingresar un conjunto de búfer buftypede terminal a terminal, en realidad puede usar esto en su lugar:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif
Nikola Jichev
fuente
Encontré que: startinsert no funciona para terminales vim 8 nativas a partir de esta publicación. En realidad, se establece explícitamente en :help terminaleso, ": startinsert es ineficaz". Encontré que exec 'normal! i'funciona en su lugar.
Kevin
1
"Descubrí que: startinsert no funciona para terminales vim 8 nativas a partir de esta publicación". Eso es triste. Vim tiene mucho que aprender de NeoVim.
trusktr
0

O incluso un poco mejor:

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

Lo que <buffer>hará que el comando au se aplique localmente, por lo que solo se aplicará al tipo de búfer termal. Esto también es útil para cambiar la configuración solo para el terminal. Tal como cambiar de líneas relativas a absolutas;)

Además ... no puedo ir :startinserta trabajar, incluso si todos los documentos lo señalan. Tuve que hacer lo siguiente:

    au BufEnter <buffer> exec "normal i"
aemonge
fuente