[vim] Vim에서 일반 모드와 삽입 모드 사이에서 커서를 어떻게 변경합니까?

가능한 경우 어떤 모드에 있는지에 따라 Vim의 커서 (색상, 모양 등)를 변경하는 방법을 알고 싶습니다.

나는 삽입 모드에 있지 않다는 것을 끊임없이 잊고 코드를 입력하기 시작합니다. 그 결과 모든 종류의 미친 일이 발생합니다. 커서에 일종의 시각적 표시가 있으면 도움이 될 것입니다.



답변

삽입 모드 전환을 나타내는 인기있는 옵션 cursorline은 현재 화면 행이 강조 표시되는지 여부를 담당 하는 옵션을 전환하는 것입니다 (참조 :help cursorline).

:autocmd InsertEnter,InsertLeave * set cul!

또는,

:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul

CursorLine강조 표시 그룹을 수정하여 커서 선의 스타일을 원하는대로 변경합니다 ( :help :highlight
참조 :help highlight-groups).


답변

다음은 Linux의 xterm, urxvt 및 기타 터미널 에뮬레이터에서 작동합니다. macOS의 iTerm2; Windows에서 ConEmu를 사용하는 Git Bash; 기타 (댓글 참조) :

let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"

" Optionally reset the cursor on start:
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END

기타 옵션 (뒤의 숫자 대체 \e[) :

Ps = 0  -> blinking block.
Ps = 1  -> blinking block (default).
Ps = 2  -> steady block.
Ps = 3  -> blinking underline.
Ps = 4  -> steady underline.
Ps = 5  -> blinking bar (xterm).
Ps = 6  -> steady bar (xterm).

tmux 를 사용할 때 ( \<Esc>Ptmux;이스케이프 없이 ) 그렇게 사용하는 것이 중요합니다 . tmux는 창 / 창을 전환 할 때 올바른 커서 모양을 추적합니다.

작동하지 않으면 TERM=xterm-256colortmux를 시작하기 전에 설정 하거나 다음을 추가하십시오 .tmux.conf( @Steven Lu 감사합니다 ).

set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'


답변

macOS 에서 tmuxiTerm2 를 사용하는 경우
다음은 커서를 블록에서 커서로 변경하고 현재 줄을 강조 표시합니다.

if exists('$TMUX')
  let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
  let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
  let &t_SI = "\<Esc>]50;CursorShape=1\x7"
  let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul

크레딧 : https://gist.github.com/andyfowler/1195581


답변

다른 모드에서 커서 모양을 변경하려면 다음을 .vimrc파일에 추가 할 수 있습니다 .

그놈 터미널 (버전 2.26)의 경우 :

if has("autocmd")
  au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
  au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
  au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
endif

그놈 터미널에서 둘 이상의 프로파일을 사용하는 경우이를 프로파일에 맞게 조정해야 할 수 있습니다.

KDE4의 Konsole :

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

이것은 여러 탭과 창에서 작동합니다.

참조 : Vim Tips Wiki의다른 모드에서 커서 모양 변경 ” .


답변

Terminus Vim 플러그인을 사용해 볼 수 있습니다 .

삽입 모드에서는 커서 모양이 얇은 수직 막대로 변경됩니다. 바꾸기 모드에서는 밑줄로 바뀝니다. 일반 모드로 돌아 가면 표준 “블록”모양으로 돌아갑니다.


답변

삽입 모드에서만 커서를 깜박이고 다른 모드에서는 고정 상태로 유지하는 것이 유용합니다.

set guicursor+=n-v-c:blinkon0


답변

Esc블록 커서를 표시하기 위해 일반 모드로 돌아 가기 위해 키를 누른 후 다른 사람이 지연을 겪고 있는지 확실하지 않지만 그렇다면 이것이 내가 수정하는 방법입니다.

사실 저는 iTerm2를 사용하고 있으며 macOS의 터미널에서 Vim을 사용하고 있습니다. 그리고 삽입 모드로 들어갈 때 커서는 여전히 블록이고 삽입 모드 나 일반 모드에있을 때 다소 혼란스러워집니다.

삽입 모드에서는가는 선을 커서로 표시하고 MacVim과 같이 일반 모드에서는 다시 블록으로 표시하고 싶었습니다. 이렇게하려면 매우 간단 합니다 . 여기에 설명 된대로.vimrc 파일 에 다음을 추가하면됩니다 .

let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"

여기에 이미지 설명 입력

그러나 보시 ESC다시피 삽입 모드를 종료하고 일반 모드로 돌아가서 블록을 다시 커서로 표시하기 위해 눌렀을 때 지연이 발생 했습니다. 그래서 그것을 고치기 위해 이것을 발견했습니다.

set ttimeout
set ttimeoutlen=1
set listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast

이제 보시다시피 꽤 잘 작동합니다.

커서로 블록으로 돌아가는 지연 수정

다른 사람에게 도움이되기를 바랍니다. ?