vim + tmux에서 커서 모양 갖습니다. 내 사양 : 윈도우 7

cygwin에서 tmux 내에서 vim을 실행할 때 어떻게 다른 커서 모양을 가질 수 있습니까?

tmux가 없으면이 라인은 내가 원하는 것을 달성하기에 충분합니다.

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

그러나 어떻게 든 내 TMUX가 그것을 깨뜨립니다-커서는 내가 어떤 vim 모드에 관계없이 블록 모양을 갖습니다.

내 사양 :

  • 윈도우 7 x64
  • 싸이 윈 x86
  • TMUX 1.9a
  • Vim 7.4.726 (+ cursorshape로 컴파일)
  • 터미널 에뮬레이터 : mintty 1.1.3
  • Cygwin 터미널 또는 Cmder에 사용 (커서 모양은 TMUX없이 만 작동)
  • echo $TERM저를 준다 screen-256color내가 가지고 있기 때문에, TMUX과 외부에서 ( export TERM=screen-256color.bashrc
  • .tmux.conf 포함한다 :
    set -g default-terminal "screen-256color"
    setw -g xterm-keys on

내가 성공하지 않고 이미 시도한 것 :

  • export TERM=xterm
  • export TERM=vt100
  • “막대를 마우스 오른쪽 버튼으로 클릭> 옵션> 모양> 커서”


답변

문제는 tmux가 커서 변경 이스케이프 코드를 터미널 에뮬레이터로 보내지 않는다는 것입니다. 원하는 이스케이프 코드를 특수한 순서로 랩핑하여 tmux에 외부 터미널로 전달하도록 지시합니다.

이스케이프 시퀀스를 래핑해야하는 시퀀스는 \<Esc>Ptmux;\<Esc> ... \<Esc>\\( Source )입니다. 은 ...당신의 이스케이프 시퀀스입니다.

따라서 다음과 같이하십시오 .vimrc.

if exists('$TMUX')
    let &t_SI = "\<Esc>Ptmux;\<Esc>\e[5 q\<Esc>\\"
    let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
    let &t_SI = "\e[5 q"
    let &t_EI = "\e[2 q"
endif

터미널 에뮬레이터 또는 cygwin을 사용하지 않으므로이 코드를 테스트 할 수 없습니다. 그러나이 방법은 나를 위해 일했습니다 (단지 터미널에 맞는 다른 이스케이프 코드를 감쌌습니다).


답변

$TERM환경 변수 의 올바른 값 은 매우 중요합니다. 와 (과) 다른지 확인하십시오 screen-256color. xterm-256color예를 들어 설정하십시오 .