Bagaimana cara memasukkan mode penyisipan saat memasuki panel terminal neovim?

16

Saya memiliki pemetaan berikut untuk membuatnya mudah untuk keluar dari panel terminal di 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

Satu-satunya masalah adalah ketika saya pindah kembali ke panel terminal, saya harus menekan iuntuk kembali ke mode insert. Saya selalu ingin berada dalam mode penyisipan ketika saya pindah ke panel neovim yang menjalankan terminal. Apa cara terbaik untuk mencapai ini?

aharris88
sumber

Jawaban:

18

Nama buffer terminal selalu dimulai dengan term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Perhatikan bahwa ini akan selalu menempatkan Anda dalam mode penyisipan ketika Anda pindah ke jendela terminal, terlepas dari mode yang Anda gunakan saat meninggalkan jendela.


Anda juga dapat menggunakan perintah otomatis serupa untuk selalu kembali dalam mode normal ketika Anda meninggalkan jendela terminal, tidak peduli bagaimana Anda meninggalkan jendela ini:

autocmd BufLeave term://* stopinsert

Benoît Faucon
sumber
Dengan solusi ini, saya mengalami masalah ini . Apakah Anda tahu cara mengatasinya?
Rastapopoulos
The BufEnterautocmd tampak seperti itu tidak memiliki masalah ini.
Rastapopoulos
3

Memasukkan set buffer terminal buftypeke terminal, Anda dapat menggunakan ini sebagai gantinya:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif
Nikola Jichev
sumber
Saya menemukan bahwa: startinsert tidak berfungsi untuk terminal asli vim 8 pada pos ini. Sebenarnya secara eksplisit dinyatakan dalam hal :help terminalitu, ": startinsert tidak efektif." Saya menemukan yang exec 'normal! i'berfungsi sebagai gantinya.
Kevin
1
"Saya menemukan bahwa: startinsert tidak berfungsi untuk terminal asli vim 8 pada pos ini." Itu menyedihkan. Vim memiliki banyak hal untuk dipelajari dari NeoVim.
trusktr
0

Atau bahkan sedikit lebih baik:

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

Yang mana <buffer>akan membuat perintah au diterapkan secara lokal, jadi hanya untuk jenis buffer termial. Ini juga berguna untuk mengubah pengaturan untuk terminal saja. Seperti swtich dari garis relatif ke absolut;)

Juga ..... Saya tidak bisa mulai :startinsertbekerja, bahkan jika semua dokumen menunjukkan hal itu. Saya harus melakukan hal berikut:

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