Comment entrer en mode insertion lors de l'accès au panneau de connexion neovim?

16

J'ai les mappages suivants pour faciliter la sortie d'un volet de terminal dans 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

Le seul problème est que lorsque je reviens dans le volet terminal, je dois appuyer sur ipour revenir en mode d'insertion. Je veux toujours qu'il soit en mode insertion lorsque je passe dans un volet neovim qui exécute un terminal. Quelle est la meilleure façon d'y parvenir?

aharris88
la source

Réponses:

18

Un nom de tampon de terminal commence toujours par term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Notez que cela vous mettra toujours en mode insertion lorsque vous passerez à la fenêtre du terminal, quel que soit le mode que vous utilisiez en quittant la fenêtre.


Vous pouvez également utiliser une commande automatique similaire pour toujours revenir en mode normal lorsque vous quittez la fenêtre du terminal, quelle que soit la façon dont vous quittez cette fenêtre:

autocmd BufLeave term://* stopinsert

Benoît Faucon
la source
Avec cette solution, je rencontre ce problème. Connaissez-vous un moyen de contourner cela?
Rastapopoulos
L' BufEnterautocmd semble ne pas avoir ce problème.
Rastapopoulos
3

En entrant un ensemble de tampons buftypede terminal sur terminal, vous pouvez réellement l'utiliser à la place:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif
Nikola Jichev
la source
J'ai trouvé que: startinsert ne fonctionne pas pour les terminaux natifs vim 8 à partir de ce post. Il est en fait explicitement indiqué dans :help terminalcela: ": startinsert est inefficace." J'ai trouvé que ça exec 'normal! i'marche à la place.
Kevin
1
"J'ai trouvé que: startinsert ne fonctionne pas pour les terminaux natifs de vim 8 à ce jour." C'est triste. Vim a beaucoup à apprendre de NeoVim.
trusktr
0

Ou encore un peu mieux:

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

Ce qui <buffer>fera que la commande au sera appliquée localement, donc uniquement pour le type de tampon termial. Ceci est également utile pour changer le paramétrage du terminal uniquement. Tels que swtich de lignes relatives à absolu;)

Aussi ..... je ne peux pas me mettre :startinsertau travail, même si tous les documents le soulignent. Je devais faire ce qui suit:

    au BufEnter <buffer> exec "normal i"
aemonge
la source