zsh : tmux에서 TERM = screen-256color로 설정하고 tmux없이 xterm-256color로 설정


18

나는 나의 필요가 $TERM있을 수 xterm-256color있지만 ( "일반"zsh을 가진 터미널)에서 TMUX의 외부 screen-256color내부 TMUX합니다.

먼저 나는 시도했다 :

  • 추가 export TERM='xterm-256color'내에 ~/.zshrc.
  • set -g default-terminal "screen-256color"내 추가~/.tmux.conf

I 단자 (예를 들어, xterm 등)을 열 때 지금, TERM이다 xterm-256color, 올바른이다. 그러나 tmux를 실행하면 TERM다시 나타납니다 xterm-256color!

그런 다음 내 라인을 주석 처리하려고했습니다 ~/.zshrc. 이제 터미널을 열 때 TERMis xterm이고 tmux를 실행할 때 TERM입니다 screen-256color. 내가 설정 한 경우 것 같다 그래서 TERM.zshrcTMUX 먼저, 세트 TERM에 대한 screen-256color실행은 (zsh을 인) 쉘,을, 그리고 zsh을 읽기 .zshrc및 재설정 TERMxterm-256color.

그럼, 어떻게 만들 TERMxterm-256color"일반"터미널에서, 그리고 screen-256colorTMUX에서?


5
xterm 구성 (X 자원)에서 xterm에 대한 TERM을 설정하고 tmux 구성에서 tmux에 대한 TERM을 설정하십시오. zsh에서 그렇게해야 할 이유가 없습니다.
Stéphane Chazelas

흠,하지만 다른 터미널 에뮬레이터도 사용합니다. 예를 들어 그놈 터미널 및 퀘이크 스타일 드롭 다운 콘솔 "altyo" github.com/linvinus/AltYo 는 여전히 TERM이러한 터미널에서 올바르게 설정하는 방법을 찾을 수 없습니다
Dmitry Frank

1
이러한 응용 프로그램은 TERM을 올바르게 설정 해야 합니다. 들어 gnome-terminal아마되어야한다, gnome-256color그것은 이러한 응용 프로그램을 그래서 ... 당신은 제대로 구성에 필요가 없습니다 zsh. 이들이 사용하는 이유 xterm는보다 구체적인 terminfo 항목이없는 시스템으로 ssh 할 때 문제를 피하기위한 것입니다. 포괄적 인 terminfo 데이터베이스가있는 머신에만 sshing하고 있다는 것을 알고 있다면, 어플리케이션 자체에서이를 변경할 수 있고 변경해야합니다.
Stéphane Chazelas 2016 년

그리고 .zshrc kludge, IMO를 추가해야하는 경우, terminfo 데이터베이스가 불완전한 시스템에 있어야합니다 (xterm-256color를 xtermxterm-256color가 지원되지 않는 경우 로 대체 하려면). 자신의 ~ / .terminfo 데이터베이스).
Stéphane Chazelas 2016 년

우리는 에뮬레이션이 아닌 터미널 에뮬레이터에 용어를 설정해야합니다 .zshrc. 올바른 방법이 아닙니다.
jdhao

답변:


24

TERM 환경 변수는 터미널 역할을하는 응용 프로그램에서 설정해야합니다. 이것은 문제의 요점입니다. 내부에서 실행중인 프로그램에 사용중인 터미널과 지원하는 기능의 종류를 알려주십시오.

Zsh는 터미널이 아닙니다. 껍질입니다. 특별한 일을하려는 경우 TERM이 무엇으로 설정되어 있는지 상관 할 수 있지만 설정에 대한 책임은 없습니다 . 대신 ZSH_VERSION과 같은 변수를 설정하여 스크립트 나 다른 자식 프로세스에서 부모 셸에서 예상되는 동작을 이해하는 데 사용할 수 있습니다.

대신, 사용중인 터미널 응용 프로그램에 대한 구성을 확인하고 제대로보고하도록 요청해야합니다. 예를 들어 ~/.Xdefaults, 구성 값에 사용 하는 파일 에이 행을 추가하여 xterm에 대해이를 수행 할 수 있습니다 .

xterm*termName: xterm-256color

gnome-terminal은 xterm 구성이 자신의 것이 아니라 무엇을 읽는지 바보 같은 일을하는 것처럼 보입니다. 어떤 경우에는 도움이 될 수 있지만 gnome-256color로 더 올바르게 설정해야합니다. 이것은 오랫동안 (그리고 다른 VTE 기반 터미널 에뮬레이터에 대한) 그립처럼 보입니다. 이를 해킹 하는 일반적인 방법 은 설정 한 다른 값을 이용하는 것입니다.

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=gnome-256color
fi 

그러나 이것은 tmux의 문제로 되돌아갑니다. 따라서 이미 "screen-256color"또는 "screen"과 같은 경우 TERM을 재설정하지 않음으로써이를 고려해야합니다.

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=gnome-256color
fi

다른 터미널의 경우 올바른 구성 루틴을 찾아야합니다.


zsh설정에 대한 책임은 없습니다 $SHELL. login이 설정에 대한 책임, 그리고 당신은 당신이 (애플리케이션 말하려면 뭔가 다른 것을 변경 할 책임이있다 xterm, vi당신은 당신의 선호 셸 원하는 쉘 ...). zsh설정 $ZSH_VERSION및 문서화 된 특수 쉘 변수를 담당하지만을 건드리지 않습니다 $SHELL.
Stéphane Chazelas 2016 년

@ StéphaneChazelas 수정 해 주셔서 감사합니다.
Caleb

덕분에 konsoleTERM을 bashrc에 넣는 대신 TERM을 설정 하는 방법을 찾아 보았습니다 . 이 프로파일의 일반 탭, 환경 설정 발견은에서 변경 xtermxterm-256color
마이크 Lippert의

내 바닐라에서 그놈 터미널 보고서를 설치 deb10 지적 가치 truecolor대신 gnome-terminal$COLORTERM하고, 상기 감지 메커니즘되는 것이므로 작동하지 않을 수 있습니다. XTERM은이 값을 전혀 설정하지 않은 것으로 보이므로 값을 확인하는 것이 유효 할 수 있습니다. 이 용어 유형은 아마도 다른 곳 에서이 요지에서 부분적으로 논의 됩니다 : gist.github.com/XVilka/8346728#true-color-detection
Shaun Wilson

8

.zshrc 안에 넣습니다.

[[ $TMUX = "" ]] && export TERM="xterm-256color"

그리고 .tmux.conf 내부

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

2
또는 [[ $TMUX != "" ]] && export TERM="screen-256color" 이 방법으로 zsh는 tmux 세션 내에서 호출 된 경우에만 TERM을 설정합니다
Titou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.