
Мне нужно, $TERM
чтобы он находился xterm-256color
вне tmux (в «обычном» терминале с zsh), но screen-256color
внутри tmux.
Сначала я попробовал:
- добавить
export TERM='xterm-256color'
в мой~/.zshrc
. - добавить
set -g default-terminal "screen-256color"
в мой~/.tmux.conf
Теперь, когда я открываю терминал (например, xterm), TERM
это xterm-256color
, что правильно. Но когда я запускаю tmux, TERM
это снова xterm-256color
!
Затем я попытался закомментировать строку в моем ~/.zshrc
. Теперь, когда я открываю терминал, TERM
это xterm
, а когда я запускаю tmux, TERM
это screen-256color
. Так что, похоже, если я устанавливаю TERM
в .zshrc
, tmux сначала устанавливает TERM
значение screen-256color
, запускает оболочку (которая является zsh), а zsh считывает .zshrc
и сбрасывает TERM
значение xterm-256color
.
Итак, как сделать TERM
так, чтобы был xterm-256color
и "обычный" терминал, и screen-256color
tmux?
решение1
Переменная окружения TERM должна быть установлена приложением, которое действует как ваш терминал. В этом и заключается вся суть: дать программам, работающим внутри них, знать, какой терминал используется и, следовательно, какие функции он поддерживает.
Zsh — это не терминал. Это оболочка. Она может заботиться о том, какой у вас TERM, если она хочет делать что-то особенное, но она не должна отвечать запараметрВместо этого он отвечает за установку переменных, таких как ZSH_VERSION, которые могут использоваться скриптами или другими дочерними процессами, чтобы понять, какое поведение ожидать от родительской оболочки.
Вместо этого вам нужно проверить конфигурацию для любого терминального приложения, которое вы используете, и попросить его сообщить о себе должным образом. Например, вы можете сделать это для xterm, добавив эту строку в файл, ~/.Xdefaults
который он использует для значений конфигурации:
xterm*termName: xterm-256color
Похоже, gnome-terminal делает идиотскую вещь, считывая конфигурацию вашего xterm вместо того, чтобы иметь свою собственную. Это может помочь в некоторых случаях, но правильнее было бы установить vte-256color. Похоже, это давняя претензия к нему (и к некоторым другим эмуляторам терминала на основе VTE).обычный способЧтобы обойти это, можно использовать другое значение, которое оно устанавливает:
if [ "$COLORTERM" = "gnome-terminal" ]; then
export TERM=vte-256color
fi
Но это возвращает вас к вашей проблеме с tmux, поэтому вам придется это учитывать и не сбрасывать TERM, если он уже равен чему-то вроде «screen-256color» или «screen»:
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"