Jak wejść w tryb wstawiania przy wejściu do panelu terminali neovim?

16

Mam następujące mapowania, aby ułatwić wyjście z panelu terminalu w 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

Jedynym problemem jest to, że kiedy wracam do panelu terminali, muszę nacisnąć, iaby wrócić do trybu wstawiania. Zawsze chcę, aby był w trybie wstawiania, kiedy przechodzę do panelu neovim z uruchomionym terminalem. Jaki jest najlepszy sposób na osiągnięcie tego?

aharris88
źródło

Odpowiedzi:

18

Nazwa bufora terminala zawsze zaczyna się od term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Pamiętaj, że zawsze przejdzie to w tryb wstawiania po przejściu do okna terminala, niezależnie od trybu używanego podczas wychodzenia z okna.


Możesz również użyć podobnej komendy automatycznej, aby zawsze wracać do trybu normalnego po opuszczeniu okna terminala, bez względu na sposób opuszczenia tego okna:

autocmd BufLeave term://* stopinsert

Benoît Faucon
źródło
Dzięki temu rozwiązaniu mam ten problem. Czy znasz sposób na obejście tego?
Rastapopoulos
Te BufEnterspojrzenia autocmd jak nie ma tego problemu.
Rastapopoulos
3

Wprowadzając zestawy buforów terminali buftypedo terminala, możesz zamiast tego użyć tego:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif
Nikola Jichev
źródło
Odkryłem, że: startinsert nie działa dla natywnych terminali vim 8 od tego postu. W rzeczywistości jest to wyraźnie stwierdzone w następujący sposób :help terminal: „: startinsert jest nieskuteczny”. Znalazłem, że exec 'normal! i'działa zamiast tego.
Kevin
1
„Odkryłem, że: startinsert nie działa dla natywnych terminali vim 8 od tego postu.” To smutne. Vim ma wiele do nauczenia się od NeoVim.
trusktr
0

Lub nawet nieco lepiej:

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

Który <buffer>sprawi, że polecenie au będzie stosowane lokalnie, więc tylko dla typu bufora termicznego. Jest to również przydatne do zmiany, więc ustawienie tylko dla terminala. Takich jak swtich od linii względnych do absolutnych;)

Również ... Nie mogę zabrać się :startinsertdo pracy, nawet jeśli wszystkie dokumenty wskazują na to. Musiałem wykonać następujące czynności:

    au BufEnter <buffer> exec "normal i"
aemonge
źródło