zsh: установить TERM = screen-256color в tmux, но xterm-256color без tmux

Мне нужно, чтобы мой $TERM был xterm-256color за пределами tmux (в « xterm-256color » терминале с 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 . Теперь, когда я открываю терминал, TERMxterm , и когда я запускаю tmux, TERM имеет screen-256color . Поэтому кажется, что если я устанавливаю TERM в .zshrc , tmux сначала устанавливает TERM на screen-256color , запускает оболочку (которая является zsh), а zsh читает .zshrc и сбрасывает TERM на xterm-256color .

Итак, как заставить TERM быть xterm-256color в «обычном» терминале и screen-256color в tmux?

2 Solutions collect form web for “zsh: установить TERM = screen-256color в tmux, но xterm-256color без tmux”

Переменная среды TERM должна быть задана приложением, которое действует как ваш терминал. В этом весь смысл: позволить программам, запущенным внутри них, знать, какой терминал используется, и, следовательно, какие функции он поддерживает.

Zsh не является терминалом. Это оболочка. Возможно, вам будет интересно, к чему настроен ваш TERM, если он хочет делать что-то особенное, но он не должен отвечать за его настройку . Вместо этого он отвечает за установку переменных, таких как ZSH_VERSION, которые могут использоваться скриптами или другими дочерними процессами, чтобы понять, какое поведение ожидать от их родительской оболочки.

Вместо этого вам нужно проверить конфигурацию для любого используемого приложения терминала и попросить его сообщить о себе должным образом. Например, вы можете сделать это для xterm, добавив эту строку в файл ~/.Xdefaults который он использует для значений конфигурации:

 xterm*termName: xterm-256color 

Кажется, gnome-terminal делает идиотскую вещь, читая, какова будет ваша xterm-конфигурация, а не ее собственная. В некоторых случаях это может привести к вам, но лучше установить gnome-256color. Похоже, что это довольно долгое время (и некоторые другие эмуляторы терминала на базе VTE). Обычный способ взломать это – использовать другое значение, которое он устанавливает:

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

Но это возвращает вас к вашей проблеме с помощью tmux, поэтому вам придется учитывать это, не перезагружая TERM, если это уже что-то вроде «screen-256color» или «screen»:

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

Для других терминалов вам нужно будет найти соответствующие процедуры настройки.

Внутри вашего .zshrc, поставьте

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

И внутри вашего .tmux.conf

 set -g default-terminal "screen-256color" 
  • Как получить более длинный заголовок xterm в zsh
  • Массивы в Zsh. Проверьте, не определена ли какая-либо из следующих переменных
  • tcsh vs zsh. Символы Escape / Control
  • tmux резко выходит сразу после загрузки
  • Для перенаправления ввода существуют функциональные различия между bash / zsh <<< «$ (<файл)» и традиционным <file?
  • Очистить или отключить псевдонимы в zsh
  • Определение путей использования автозаполнения zsh
  • Изменить местоположение замещения процесса zsh '= ()'
  • Как я могу заполнить -N числовой параметр?
  • zle reset-prompt предотвращает просмотр истории с помощью клавиш со стрелками
  • zsh compinit: небезопасные каталоги, запустить compaudit для списка
  • Заменить текущий процесс на его coprocess / child
  • Linux и Unix - лучшая ОС в мире.