Мне нужно, $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?
TERM
в этих терминалахgnome-terminal
, вероятно, должно бытьgnome-256color
... Так что это те приложения, которые вы должны правильно настроить, а неzsh
. Причина, по которой они используютxterm
это, вероятно, состоит в том, чтобы избежать проблем при подключении к компьютерам, на которых нет более конкретных записей terminfo. Если вы знаете, что используете только компьютеры с исчерпывающей базой данных terminfo, вы можете и должны изменить это в самих приложениях.xterm
если xterm-256color s не поддерживается, хотя было бы еще лучше добавить эти записи в наш собственная ~ / .terminfo база данных)..zshrc
. Это не правильный путь.Ответы:
Переменная среды TERM должна быть установлена приложением, которое действует как ваш терминал. В этом весь смысл: дать знать программам, работающим внутри них, какой терминал используется и, следовательно, какие функции он поддерживает.
Зш не терминал. Это оболочка. Для него может быть важно, на что настроен ваш TERM, если он хочет делать особые вещи, но он не должен отвечать за его настройку . Вместо этого он отвечает за установку переменных, таких как ZSH_VERSION, которые могут использоваться скриптами или другими дочерними процессами, чтобы понять, какое поведение ожидать от их родительской оболочки.
Вместо этого вам нужно проверить конфигурацию для любого терминального приложения, которое вы используете, и попросить его сообщить о себе правильно. Например, вы можете сделать это для xterm, добавив эту строку в
~/.Xdefaults
файл, который он использует для значений конфигурации:Похоже, что gnome-Terminal делает идиотскую вещь, читая, что будет с вашей конфигурацией xterm, вместо того, чтобы иметь свою собственную. Это может помочь вам в некоторых случаях, но правильнее установить gnome-256color. Похоже, это давнишняя схватка (и некоторые другие эмуляторы терминалов на основе VTE). Распространенный способ взломать вокруг этого использовать другое значение , он установлен:
Но это возвращает вас к проблеме с tmux, поэтому вам придется учитывать это, не сбрасывая TERM, если это уже что-то вроде «screen-256color» или «screen»:
Для других терминалов вам нужно будет найти их правильные процедуры конфигурации.
источник
zsh
не несет ответственности за настройку$SHELL
.login
отвечает за его настройку, и вы несете ответственность за то, чтобы изменить это на что-то другое, если вы хотите сообщить приложениям (xterm
,vi
...), какую оболочку вы хотите использовать в качестве предпочитаемой.zsh
отвечает за установку$ZSH_VERSION
и несколько задокументированных специальных переменных оболочки, но это не трогает$SHELL
.konsole
установить TERM, а не помещать его в мой bashrc. Нашел его на вкладке «Общие» профиля «Среда» и изменил егоxterm
наxterm-256color
truecolor
вместоgnome-terminal
for$COLORTERM
и поэтому вышеописанный механизм обнаружения может не работать. XTERM, по-видимому, вообще не устанавливает это значение, может быть допустимо проверить любое значение. этот тип термина частично обсуждается в этой сущности, возможно, в другом месте: gist.github.com/XVilka/8346728#true-color-detectionВнутри вашего .zshrc положите
И внутри вашего .tmux.conf
источник
[[ $TMUX != "" ]] && export TERM="screen-256color"
таким образом, zsh установит TERM, только если вызывается в сеансе tmux