Формат запроса zsh в соответствии со значением переменной среды

Я хочу, чтобы цвет моей подсказки zsh определялся на основе того, включен ли я в сеанс tmux или нет. В bash это можно сделать, проверив значение $ TMUX, но я не могу найти эквивалентный метод в zsh. Возможно ли это в zsh?

2 Solutions collect form web for “Формат запроса zsh в соответствии со значением переменной среды”

В zsh параметр prompt_subst по умолчанию отключен. Если вы хотите использовать переменные подстановки в своем приглашении, включите его.

 setopt prompt_subst PS1='$foo' 

Однако для $TMUX вам это не нужно. Значение не изменяется во время сеанса, поэтому вы можете инициализировать PS1 при запуске оболочки.

 setopt prompt_subst if (($+TMUX)); then PS1='[tmux:${TMUX_PANE//\%/%%}] %# ' else PS1='[not tmux] %# ' fi 

Обратите внимание, что быстрое расширение происходит после переменной susbtitution, поэтому процентные знаки в значении переменной должны быть защищены.

При запуске tmux наследует переменные среды оболочки, которая запустила его (как и все другие процессы).
С этой точки tmux затем предоставит те же самые переменные среды на псевдотерминалы, которые он создает. За исключением одной важной переменной среды

 $TERM 

Сервер tmux будет удерживать значение, предоставленное ему исходной оболочкой.
Вы можете запросить это с помощью

 <Cb>:display-message "$TERM" 

в моей системе это дает xterm-256color .
но все псевдотерминалы tmux начнут получать что-то вроде

 $TERM=screen 

в моей системе я установил псевдотерминалы в TERM=screen-256color чтобы программы (vim), запущенные внутри tmux, знали о цветовых возможностях терминала. Вы можете сделать это с помощью этой команды tmux

 set -g default-terminal "screen-256color" 

В любом случае вы можете проверить наличие этой строки и соответственно настроить свою подсказку

~/.zshrc

 if [[ $TERM == *screen* ]]; then # you're in tmux, congratulate yourself :) # set your tmux prompt here else # you're not in tmux # set your fallback prompt here fi 
  • Убивание подпроцессов после завершения или уничтожения скрипта
  • Получение «zsh: command not found: time» при запуске `time` в подселле
  • alias -g '$ {1 + "$ @"}' = '"$ @"', что он делает?
  • Режим zsh vi: просмотр последних команд, начиная с
  • path_helper и zsh
  • zsh, развернуть * до (a | b | c)
  • Переключение на `zsh`: все ли скрипты bash совместимы с` zsh`?
  • tmux резко выходит сразу после загрузки
  • Передача именованных аргументов в сценарии оболочки
  • При использовании $ hash_array
  • zsh: завершение меню для glob
  • Linux и Unix - лучшая ОС в мире.