Como entrar no modo de inserção ao entrar no painel de terminais neovim?

16

Eu tenho os seguintes mapeamentos para facilitar a saída de um painel de terminal no 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

O único problema é que, quando volto ao painel de terminais, tenho que pressionar ipara voltar ao modo de inserção. Eu sempre quero que ele esteja no modo de inserção quando for para um painel neovim que esteja executando o terminal. Qual é a melhor maneira de conseguir isso?

aharris88
fonte

Respostas:

18

Um nome de buffer do terminal sempre começa com term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Observe que isso sempre o colocará no modo de inserção quando você for para a janela do terminal, independentemente do modo que estava usando ao sair da janela.


Você também pode usar um comando automático semelhante para sempre voltar ao modo normal quando sair da janela do terminal, independentemente de como sair dessa janela:

autocmd BufLeave term://* stopinsert

Benoît Faucon
fonte
Com esta solução, encontro esse problema. Você saberia uma maneira de contornar isso?
Rastapopoulos
O BufEnterautocmd parece que não tem esse problema.
Rastapopoulos
3

Ao inserir um conjunto de buffers buftypede terminal no terminal, você pode realmente usá-lo:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif
Nikola Jichev
fonte
Descobri que: startinsert não funciona para terminais nativos do vim 8 a partir deste post. Na verdade, é explicitamente declarado :help terminalque ": startinsert é ineficaz". Descobri que exec 'normal! i'funciona em seu lugar.
22618 Kevin Kevin
1
"Descobri que: startinsert não funciona para terminais nativos do vim 8 a partir deste post." Isso é triste. O Vim tem muito a aprender com o NeoVim.
trusktr
0

Ou até um pouco melhor:

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

O qual <buffer>fará com que o comando au seja aplicado localmente, somente para o tipo de buffer termial. Isso também é útil para alterar a configuração, apenas para o terminal. Como swtich de linhas relativas a absolutas;)

Também ... Eu não posso :startinserttrabalhar, mesmo que todos os documentos apontem para isso. Eu tive que fazer o seguinte:

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