Як увійти в режим вставки при введенні термінальної панелі neovim?


16

У мене є такі відображення, щоб полегшити вихід з термінальної панелі в неовімі:

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 застосовуватися локально, тому лише для типу терміального буфера. Це також корисно для зміни таких налаштувань лише для терміналу. Такі як swtich від відносних прямих до абсолютних;)

Також ..... Я не можу приступити :startinsertдо роботи, навіть якщо всі документи вказують на це. Мені довелося зробити наступне:

    au BufEnter <buffer> exec "normal i"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.