Vim 색상이 tmux의 내부와 외부에서 다르게 보이는 이유는 무엇입니까?


29

환경:

  • 페도라 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-256colorscreen-256color터미널 기능 사이에 약간의 차이가 있다고 생각 합니다. 제목에서 제기 된 질문은 다음과 같습니다. 터미널 기능에서 Vim 색상이 다른 이유는 무엇입니까? 나는 :set termcaptmux의 내부와 외부의 차이점을 보았지만 실제로 어떤 변수가 행동의 차이를 일으키는 지 궁금합니다.

이전 질문 과 상관없이 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 내부에서 다른 색상을 계속 표시했습니다.


시작 script, 시작 vim, 종료 vim한 다음 script쉘 을 종료 하고 결과 typescript파일을 첨부 할 수 있습니까? 그런 다음 TERM=screen-256color vim대신 동일한 단계를 반복하십시오 .
egmont


1
xterm-256color버전 에서 256 색 이스케이프 시퀀스 (파일에서 "38; 5;"검색)를 볼 수 있지만에서 볼 수는 없습니다 screen-256color. 예를 들어 \e[38;5;81min xterm-256color(256 색 팔레트의 색상 # 81, 중간 파랑 음영) 이있는 곳 (8 색 팔레트의 표준 파랑 ) screen-256color\e[34m대신 포함 됩니다. 따라서 주요 질문은 vim이의 경우 256 색상 팔레트를 사용하지 않는 이유입니다 TERM=screen-256color.
egmont

또 다른 흥미로운 점은 xterm-256color버전이 먼저 레거시 색상과 256 색상 팔레트로 화면을 두 번 인쇄하는 것 같습니다. 예를 들어 파일에서 "F1"을 검색하면 xterm-256color에서 첫 번째는 \e[34m색상으로, 두 번째 는에서로 일치하는 항목을 찾을 수 \e[38;5;81m있습니다. 나는 여기서 무슨 일이 일어나고 있는지 모른다.
egmont

추가 set -g default-terminal "screen.xterm-256color"~/.tmux.confTMUX의 설정을 다시로드 : 나 (강조 문제) 근무 (<고사> 소스 파일 ~ / .tmux.conf). thx
dtrckd

답변:



17

나는 전에 비슷한 문제가 있었다. Vim의 파란색 주석은 읽기 어려웠습니다. 에서 .tmux.conf나는이 설정 :

set -g default-terminal "screen-256color"

그리고 .vimrc:

set background=dark

이제 다음과 같이 보이고 그놈 터미널과 Cygwin에서 모두 작동합니다. 여기에 이미지 설명을 입력하십시오


3
이것은 나를 위해 해결했습니다. 어떤 이유로 tmux에서 vim은 어두운 배경을 감지하지 못했습니다. bg=dark내 vimrc에서 명시 적으로 설정 하면 수정되었습니다.
Adam Keenan

이상한 - 내 $TERM내부와 외부 모두 tmux이었다 "xterm-256color"명시 적으로 backgroun에뿐만 아니라 나를 위해 그것을 한 설정. 고맙습니다!
nronnei

나도 일했다. 나는 모든 것이 편안해 보였기 stterm때문에 문제가 있다고 생각했습니다 xfce4-terminal( 어두운 배경 cyan대신에 주석이 나타나는 blue것이 매우 어렵다). 이 변경 후 모든 것이 잘 작동합니다. 그러나 unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim구문 강조 등을 사용하려면 vimrc 파일 에 추가 해야합니다.
Abinash Dash

2

에서 Vim이 출력 한 색상에 대한 @egmont의 분석 덕분에 TERM=screen-256colorVim이 두 가지 시나리오에서 사용하는 색상 구성표를보고 영감을 받았습니다.

Vim default 경우 모두 색 구성표를 사용한다고보고합니다 . defaultFedora 25 ( /usr/share/vim/vim80/colors/default.vim) 의 색 구성표 가 실제로 표시되는 색과 일치하지 않는 것 같아서 이상하다고 생각했습니다 TERM=xterm-256color. :colorscheme defaultwhen을 사용하여 색상 구성표를 명시 적으로 설정하면 TERM=xterm-256colorVim의 모양이 when로 변경됩니다 TERM=screen-256color. Vim을 처음 시작할 때의 색상으로 되돌리려면 ron색상 구성표 를 사용해야했습니다 . 진행!

Vim에서 색상 구성표를 사용한다고보고 할 때 Ask Ubuntu 답변 을 찾았습니다. default반드시 default.vim테마별 색상 구성표를 의미하는 것은 아닙니다 . 대답에서 알 수 있듯이 어두운 테마 (사용중인) ron는 위에서 발견 한 것처럼 색 구성표에 해당합니다 . (이 게시물은 우분투와 관련이 있지만 OP가 그놈을 사용하고 있다고 가정합니다.)

또한 내가 가지고있는 것과 동일한 문제를 설명하는 것으로 보이는 또 다른 질문 을 발견했습니다 . 이 질문을 게시하기 전에 검색하는 동안 문제가 발생했지만 어떤 이유로 색상 구성표가 관련성이 있다고 생각하지 않았습니다.

나는 @LapshinDmitry가 그의 대답에서 한 일을하고 colorscheme ron~/.vimrc파일에 명시 적으로 설정 했습니다 . 이제 TMux 내부 또는 외부에서 Vim을 시작하든 색상이 동일하게 나타납니다. 유일한 단점은 바탕 화면 테마를 어두운 풍미에서 밝은 풍미로 변경하면 Vim이 "기본"밝은 테마 색 구성표로 자동 전환되지 않는 것 peachpuff입니다. 테마를 바꿀 가능성이 거의 없기 때문에 그와 함께 살 수 있습니다.

~/.vimrc해결책이 아닌 해결 방법 에서 색상 구성표를 명시 적으로 설정하는 것을 고려하기 때문에이 대답을 수락하지 않습니다 . Vim이의 값에 따라 다른 "기본"색 구성표를로드하는 이유를 누군가가 설명 할 수 있다면 TERM근본 원인을 이해하는 데 더 관심이 있기 때문에 그 대답을 기꺼이 받아 들일 것입니다. Vim이 두 terminfo 파일 사이의 터미널 기능을 해석하는 방법과 관련이 있다고 생각합니다.


또한 왜 vim이런 식으로 행동하는지 궁금 합니다. 결국이 bce기능은 사용 가능한 색상 수와 관련이 없어야합니다.
egmont

@egmont @ThomasDickey의 답변을 다음과 같이 해석했습니다. 1) Vim bce은 터미널 의 기능을 확인합니다 . 2)있는 경우 색 구성표 "A"를 선택하고 3) 그렇지 않으면 색 구성표 "B"를 선택합니다. 두 경우 모두 색상 깊이 가 동일 하다고 생각합니다 (예 : 256 색 t_Co). 내 시스템의 "B"색 구성표는 256 색이 가능 하더라도 8 색 팔레트 만 사용하는 입니다 ( 타자 스크립트 분석에서 관찰 한 내용을 설명하는 것 같습니다. 틀린 경우 수정하십시오). 을 실행 :colorscheme ron하면 동일한 Vim 세션에서 256 색 이스케이프 시퀀스가 ​​표시됩니다.
Rusty Shackleford

설명 주셔서 감사합니다-나는 여전히 이것 뒤에 어떤 근거를 볼 수 없습니다. 신경 쓰지 마. vim정말 이상한 디자인 결정이 있습니다.
egmont

0

내 TERM 변수는 외부 TMux입니다 : xterm-256color 내부 TMux : screen-256color

맞고 나를 위해 일하고 있습니다. 다른 터미널 (urxvt를 사용)로 시도하여 그놈 터미널이 문제인지 확인하십시오. 의 

또한 COLORTERM(광산이로 설정 됨 rxvt) 및 을 확인하십시오 unset TERMCAP.


제안 해 주셔서 감사합니다. I는 (외부 urxvt와 동일한 테스트를 실행 TERM 하다 rxvt-unicode-256color적절한 사용) ~/.Xdefaults불행히도 여전히 내부 및 외부 TMUX 다른 색상을 관찰했다. 그놈 터미널 시나리오 COLORTERM입니다 truecolorTERMCAP내부와 외부 TMUX 모두 비어 있습니다. urxvt의 시나리오 COLORTERM입니다 rxvt-xpm외부 truecolor동안, 내부 TMUX TERMCAP내부와 외부 TMUX 모두 비어 있습니다.
Rusty Shackleford 2

@RustyShackleford 이것은 Vim 전용입니까? 'termguicolors'를 사용하고 있습니까? :help xterm-true-color좀 더 기본 Vim 설정 을 보거나 시도 하십시오 .
Laktak

지금까지 Vim에서 문제를 발견했습니다 (내가 말했듯이 최근에 tmux를 사용하기 시작했습니다). 예를 들어, 터미널 프롬프트와 Git CLI 출력은 tmux의 내부와 외부에서 동일한 색상으로 나타납니다. 두 경우 모두 termguicolors내 보고서 .vimrc:set termguicolors?보고서 notermguicolors에 설정하지 않습니다 . 참조한 도움말 항목을 살펴 보겠습니다. 감사!
Rusty Shackleford

0

의심 할 여지없이 구글이 내 다음 컴퓨터를 설정했을 때 내 자신의 참조를 위해.

  • Vim8 / 네오 빔
  • 윈도우 10
  • 힘내 배쉬
  • 툭스 2.7

필요한 바이너리와 DLL을 Git bash의 PATH로 가져 오려면 다음 지시 사항을 사용하십시오.

https://blog.pjsen.eu/?p=440

다음 명령을 사용하여 구성하십시오.

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.