Wie wechsle ich in den Einfügemodus, wenn ich das Neovim-Terminalfenster betrete?


16

Ich habe die folgenden Zuordnungen, um das Verlassen eines Terminalfensters in neovim zu vereinfachen:

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

Das einzige Problem ist, dass ich beim Zurückkehren in den Terminalbereich auf drücken muss i, um in den Einfügemodus zurückzukehren. Ich möchte immer, dass es sich im Einfügemodus befindet, wenn ich in ein Neovim-Fenster wechsle, in dem Terminal ausgeführt wird. Was ist der beste Weg, um dies zu erreichen?

Antworten:


18

Ein Terminalpuffername beginnt immer mit term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Beachten Sie, dass Sie dadurch immer in den Einfügemodus versetzt werden, wenn Sie zum Terminalfenster wechseln, unabhängig davon, welchen Modus Sie beim Verlassen des Fensters verwendet haben.


Sie können auch einen ähnlichen automatischen Befehl verwenden, um beim Verlassen des Terminalfensters immer wieder in den normalen Modus zurückzukehren, unabhängig davon, wie Sie dieses Fenster verlassen:

autocmd BufLeave term://* stopinsert


Mit dieser Lösung tritt dieses Problem auf. Würdest du wissen, wie du es umgehen kannst?
Rastapopoulos

Die BufEnterautocmd scheint dieses Problem nicht zu haben.
Rastapopoulos

3

Wenn Sie Terminal-Puffersets buftypein Terminal eingeben, können Sie dies auch verwenden:

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

Ich habe festgestellt, dass: startinsert für native vim 8-Terminals ab diesem Beitrag nicht funktioniert. :help terminalTatsächlich heißt es darin ausdrücklich: "startinsert ist unwirksam." Ich fand, dass exec 'normal! i'das stattdessen funktioniert.
Kevin

1
"Ich habe festgestellt, dass: startinsert für native vim 8-Terminals ab diesem Beitrag nicht funktioniert." Das ist traurig. Vim kann viel von NeoVim lernen.
Trusktr

0

Oder noch etwas besser:

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

Was das <buffer>wird der Au - Befehl macht lokal angewandt werden, so dass nur für den Terminal ausgeben Puffertyp. Dies ist auch nützlich, um diese Einstellung nur für das Terminal zu ändern. Wie zum Beispiel von relativen Linien zu absoluten;)

Außerdem ... kann ich nicht :startinsertzur Arbeit gehen, auch wenn alle Dokumente darauf verweisen. Ich musste Folgendes tun:

    au BufEnter <buffer> exec "normal i"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.