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?

  • autojump: поддержка папок, которые разделяют большинство родителей с текущим каталогом
  • Я перепутал свой zshrc на удаленном сервере, и теперь я не могу запускать какие-либо команды!
  • Как исправить вкладку, чтобы она не скрывала записи?
  • Почему требуется перезагрузка ежедневной .zshrc с использованием псевдонима, содержащего $ (date -u +% Y% m% d)?
  • Gnome-terminal и Zsh: сохранить текущий каталог на новой вкладке / окне
  • Иногда мой zsh испортил конец строк
  • изменить цвет подсказки в зависимости от пользователя или root в zsh
  • Как сообщить остальной системе, что моя оболочка изменилась с zsh на bash?
  • 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" 
    Linux и Unix - лучшая ОС в мире.