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삽입 모드로 돌아 가야한다는 것입니다. 터미널을 실행하는 네오 빔 창으로 이동할 때 항상 삽입 모드에 있기를 원합니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?

답변:


18

터미널 버퍼 이름은 항상 다음으로 시작합니다 term://.

autocmd BufWinEnter,WinEnter term://* startinsert

이것은 창을 떠날 때 사용했던 모드에 관계없이 터미널 창으로 이동할 때 항상 삽입 모드에있게됩니다.


이 창을 떠나는 방법에 관계없이 유사한 자동 명령을 사용하여 터미널 창을 떠날 때 항상 일반 모드로 돌아갈 수 있습니다.

autocmd BufLeave term://* stopinsert


이 솔루션을, 나는 경험 문제를. 당신은 그 주위에 방법을 알고 있습니까?
Rastapopoulos

BufEnter좋아 autocmd의 모습이 문제가되지 않습니다.
Rastapopoulos

3

터미널 버퍼 세트 buftype를 터미널로 설정 하면 실제로 이것을 대신 사용할 수 있습니다.

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

이 게시물에서 : startinsert가 기본 vim 8 터미널에서 작동하지 않는다는 것을 알았습니다. 실제로 :help terminal": startinsert는 효과가 없습니다."라고 명시되어 있습니다. exec 'normal! i'대신 작동 한다는 것을 알았습니다 .
케빈

1
"이 게시물에서 : startinsert이 (가) native 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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.