Как войти в режим вставки при входе в панель терминала neovim?


16

У меня есть следующие сопоставления для облегчения перемещения из оконечной панели в 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

Единственная проблема заключается в том, что когда я возвращаюсь в панель терминала, мне приходится нажимать, iчтобы вернуться в режим вставки. Я всегда хочу, чтобы он был в режиме вставки, когда я перехожу на панель neovim, на которой запущен терминал. Какой лучший способ достичь этого?

Ответы:


18

Имя буфера терминала всегда начинается с term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Обратите внимание, что это всегда переведет вас в режим вставки при переходе к окну терминала, независимо от того, какой режим вы использовали при выходе из окна.


Вы также можете использовать аналогичную автокоманду, чтобы всегда возвращаться в нормальном режиме, когда вы выходите из окна терминала, независимо от того, как вы выходите из этого окна:

autocmd BufLeave term://* stopinsert


С этим решением я испытываю эту проблему. Вы знаете, как обойти это?
Растапопулос

В BufEnterautocmd похоже , что это не имеет этой проблемы.
Растапопулос

3

Ввод буфера терминала устанавливает buftypeв терминал, вы можете использовать это вместо этого:

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

Я обнаружил, что: startinsert не работает для родных терминалов vim 8 с этого поста. На самом деле это прямо указано в следующем :help terminal: «startinsert неэффективен». Я обнаружил, что exec 'normal! i'работает вместо этого.
Кевин

1
«Я обнаружил, что: startinsert не работает для родных терминалов vim 8 с этого поста». Это печально. У Vim есть чему поучиться у NeoVim.
trusktr

0

Или даже немного лучше:

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

Который <buffer>заставит команду au быть примененной локально, поэтому только для терминального типа буфера. Это также полезно для изменения, поэтому настройка только для терминала. Например свтич от относительных линий к абсолютным;)

Также ..... Я не могу приступить :startinsertк работе, даже если все документы указывают на это. Я должен был сделать следующее:

    au BufEnter <buffer> exec "normal i"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.