환경:
- 페도라 25 (4.9.12-200.fc25.x86_64)
- 그놈 터미널 3.22.1 VTE 버전 0.46.1 + GNUTLS 사용
- VIM-Vi IMproved 8.0 (2016 년 12 월 12 일, 컴파일 2 월 22 2017 16:26:11)
- tmux 2.2
최근에 tmux를 사용하기 시작했으며 Vim의 색상이 tmux의 내부 또는 외부에서 실행 중인지에 따라 변하는 것을 관찰했습니다. 아래는 Git diff를 보면서 tmux의 외부 (왼쪽) 및 내부 (오른쪽) Vim의 스크린 샷입니다.
내 TERM
변수는
- TMux 외부 :
xterm-256color
- TMux 내부 :
screen-256color
Vim은 다음과 같은 터미널 유형을 예상대로보고합니다 :set term?
.
- TMux 외부 :
term=xterm-256color
- TMux 내부 :
term=screen-256color
Vim은 두 인스턴스가 모두 256 색 모드 (를 통해 :set t_Co?
) 로 실행되고 있다고보고합니다 .
- TMux 외부 :
t_Co=256
- TMux 내부 :
t_Co=256
tmux 내에서 Vim을 256 색 모드로 실행하는 것과 관련하여 비슷한 질문이 많이 있지만 (내가 찾은 가장 좋은 대답은 here ) 위의 정보가 있다고해서 그것이 내 문제라고 생각하지 않습니다.
터미널 유형이 다음과 같이 Vim을 실행하면 tmux 외부에서 문제를 복제 할 수 있습니다 screen-256color
.
$ TERM=screen-256color vim
따라서 색상 차이를 유발하는 터미널 기능 xterm-256color
과 screen-256color
터미널 기능 사이에 약간의 차이가 있다고 생각 합니다. 제목에서 제기 된 질문은 다음과 같습니다. 터미널 기능에서 Vim 색상이 다른 이유는 무엇입니까? 나는 :set termcap
tmux의 내부와 외부의 차이점을 보았지만 실제로 어떤 변수가 행동의 차이를 일으키는 지 궁금합니다.
이전 질문 과 상관없이 tmux 내부 또는 외부에서 Vim 색상을 일관성있게 유지할 수 있습니까? 내가 시도한 것은 다음과 같습니다.
- tmux가 사용하는 기본 터미널
~/.tmux.conf
을 다양한 값 으로 명시 적으로 설정 (일부 tmux FAQ 의 조언과 반대 ) :
-g 기본 터미널 "screen-256color"설정 -g 기본 터미널 "xterm-256color"설정 -g 기본 터미널 "screen.xterm-256color"설정 -g 기본 터미널 "tmux-256color"설정
- 를 사용하여 tmux를 시작합니다
tmux -2
.
모든 경우에 Vim은 tmux 내부에서 다른 색상을 계속 표시했습니다.
xterm-256color
버전 에서 256 색 이스케이프 시퀀스 (파일에서 "38; 5;"검색)를 볼 수 있지만에서 볼 수는 없습니다 screen-256color
. 예를 들어 \e[38;5;81m
in xterm-256color
(256 색 팔레트의 색상 # 81, 중간 파랑 음영) 이있는 곳 (8 색 팔레트의 표준 파랑 ) screen-256color
이 \e[34m
대신 포함 됩니다. 따라서 주요 질문은 vim이의 경우 256 색상 팔레트를 사용하지 않는 이유입니다 TERM=screen-256color
.
xterm-256color
버전이 먼저 레거시 색상과 256 색상 팔레트로 화면을 두 번 인쇄하는 것 같습니다. 예를 들어 파일에서 "F1"을 검색하면 xterm-256color
에서 첫 번째는 \e[34m
색상으로, 두 번째 는에서로 일치하는 항목을 찾을 수 \e[38;5;81m
있습니다. 나는 여기서 무슨 일이 일어나고 있는지 모른다.
set -g default-terminal "screen.xterm-256color"
로 ~/.tmux.conf
TMUX의 설정을 다시로드 : 나 (강조 문제) 근무 (<고사> 소스 파일 ~ / .tmux.conf). thx
script
, 시작vim
, 종료vim
한 다음script
쉘 을 종료 하고 결과typescript
파일을 첨부 할 수 있습니까? 그런 다음TERM=screen-256color vim
대신 동일한 단계를 반복하십시오 .