Come accedere alla modalità di inserimento quando si accede al pannello terminale neovim?


16

Ho i seguenti mapping per semplificare lo spostamento da un pannello terminale in 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

L'unico problema è che quando torno nel riquadro del terminale, devo premere iper tornare in modalità inserimento. Voglio sempre che sia in modalità inserimento quando mi sposto in un riquadro neovim che esegue il terminale. Qual è il modo migliore per raggiungere questo obiettivo?

Risposte:


18

Un nome di buffer terminale inizia sempre con term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Nota che questo ti metterà sempre in modalità inserimento quando ti sposti nella finestra del terminale, indipendentemente dalla modalità che stavi usando quando hai lasciato la finestra.


È inoltre possibile utilizzare un comando automatico simile per tornare sempre in modalità normale quando si esce dalla finestra del terminale, indipendentemente da come si esce da questa finestra:

autocmd BufLeave term://* stopinsert


Con questa soluzione, ho riscontrato questo problema. Sapresti un modo per aggirarlo?
Rastapopoulos,

L' BufEnterautocmd sembra non avere questo problema.
Rastapopoulos,

3

Immettendo un set di buffer del terminale buftypesul terminale, è possibile utilizzarlo invece:

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

Ho scoperto che: startinsert non funziona per i terminali nativi vim 8 a partire da questo post. In realtà è esplicitamente dichiarato :help terminalche ": startinsert è inefficace". Ho scoperto che exec 'normal! i'funziona invece.
Kevin,

1
"Ho scoperto che: startinsert non funziona per i terminali nativi vim 8 a partire da questo post." È triste Vim ha molto da imparare da NeoVim.
trusktr

0

O anche leggermente meglio:

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

Il che <buffer>renderà il comando au da applicare localmente, quindi solo per il tipo di buffer termico. Ciò è utile anche per modificare le impostazioni solo per il terminale. Come swtich da linee relative a assoluto;)

Inoltre ..... non riesco a mettermi :startinsertal lavoro, anche se tutti i documenti lo indicano. Ho dovuto fare quanto segue:

    au BufEnter <buffer> exec "normal i"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.