Intereting Posts

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

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