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?

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


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

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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.