Zsh

zsh:在 tmux 中設置 TERM=screen-256color,但在沒有 tmux 的情況下設置 xterm-256color

  • July 22, 2021

我需要我$TERMxterm-256colortmux 之外(在帶有 zsh 的“普通”終端中),但screen-256color在 tmux 之內。

首先我試過:

  • 添加export TERM='xterm-256color'到我的~/.zshrc.
  • 添加set -g default-terminal "screen-256color"到我的~/.tmux.conf

現在,當我打開終端(比如 xterm)時,TERMisxterm-256color是正確的。但是當我執行 tmux 時,TERM又是xterm-256color

然後我嘗試在我的~/.zshrc. 現在,當我打開終端時,TERMxterm,當我執行 tmux 時,TERMscreen-256color。因此,如果我TERM在 中設置.zshrc,tmux 首先設置TERMscreen-256color,執行 shell(即 zsh),然後 zsh 讀取.zshrc並重置TERMxterm-256color.

那麼,如何TERMxterm-256color“普通”終端和screen-256colortmux 中使用呢?

TERM 環境變數應由充當終端的應用程序設置。這就是事情的全部意義:讓在其中執行的程序知道正在使用的終端以及它支持的功能類型。

Zsh 不是終端。它是一個貝殼。如果它想做特殊的事情,它可能會關心你的 TERM 設置是什麼,但它不應該負責設置它。相反,它負責設置諸如 ZSH_VERSION 之類的變數,腳本或其他子程序可以使用這些變數來了解其父 shell 的預期行為。

相反,您需要檢查您正在使用的任何終端應用程序的配置,並要求它正確報告自己。例如,您可以通過將此行添加到~/.Xdefaults它用於配置值的文件中來為 xterm 執行此操作:

xterm*termName: xterm-256color

似乎 gnome-terminal 做了一件愚蠢的事情,即閱讀您的 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

對於其他終端,您需要查找其正確的配置常式。

引用自:https://unix.stackexchange.com/questions/139082