zsh: tmux에서 TERM=screen-256color를 설정하지만 tmux 없이 xterm-256color를 설정합니다.

zsh: tmux에서 TERM=screen-256color를 설정하지만 tmux 없이 xterm-256color를 설정합니다.

tmux 외부(zsh가 있는 "일반" 터미널)에 $TERM있어야 하지만 tmux 내부에 있어야 합니다 .xterm-256colorscreen-256color

처음에는 다음을 시도했습니다.

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

이제 터미널(예: xterm)을 열면 , TERM맞습니다 xterm-256color. 하지만 tmux를 실행하면 TERM다시 xterm-256color!

그런 다음 내 ~/.zshrc. 이제 터미널을 열면 TERMis 이고 xterm, tmux를 실행하면 TERMis 입니다 screen-256color. 따라서 TERM에 설정하면 .zshrctmux가 먼저 TERM으로 설정되고 screen-256color쉘(zsh)이 실행되고 zsh .zshrc가 .TERMxterm-256color

그렇다면 "일반" 터미널과 tmux에 어떻게 TERM들어가 나요?xterm-256colorscreen-256color

답변1

TERM 환경 변수는 터미널 역할을 하는 애플리케이션에 의해 설정되어야 합니다. 이것이 전체 요점입니다. 내부에서 실행되는 프로그램이 어떤 터미널이 사용되고 있는지, 따라서 어떤 종류의 기능을 지원하는지 알 수 있도록 하는 것입니다.

Zsh는 터미널이 아닙니다. 껍질입니다. 특별한 일을 하려는 경우 TERM이 무엇으로 설정되어 있는지 관심을 가질 수 있지만 다음에 대해 책임을 져서는 안 됩니다.환경그것. 대신 상위 셸에서 예상되는 동작을 이해하기 위해 스크립트나 다른 하위 프로세스에서 사용할 수 있는 ZSH_VERSION과 같은 변수를 설정하는 일을 담당합니다.

대신, 사용 중인 터미널 응용 프로그램의 구성을 확인하고 자체적으로 올바르게 보고하도록 요청해야 합니다. 예를 들어, ~/.Xdefaults구성 값에 사용되는 파일에 다음 줄을 추가하여 xterm에 대해 이 작업을 수행할 수 있습니다.

xterm*termName: xterm-256color

gnome-terminal은 자신의 xterm 구성을 갖는 대신 xterm 구성이 무엇인지 읽는 바보 같은 일을 하는 것 같습니다. 어떤 경우에는 이렇게 할 수도 있지만 vte-256color로 더 적절하게 설정해야 합니다. 이는 이것(그리고 다른 VTE 기반 터미널 에뮬레이터)에 대한 오랜 불만인 것 같습니다. ㅏ일반적인 방법이 문제를 해결하려면 설정된 또 다른 값을 활용해야 합니다.

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

그러나 이로 인해 tmux 문제가 다시 발생하므로 이미 "screen-256color" 또는 "screen"과 같은 경우 TERM을 재설정하지 않음으로써 이를 고려해야 합니다.

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

다른 터미널의 경우 적절한 구성 루틴을 검색해야 합니다.

답변2

.zshrc 안에 다음을 넣으세요.

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

그리고 .tmux.conf 내부

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

관련 정보