tmux 세션에 있는지 여부에 따라 zsh 프롬프트의 색상이 달라지기를 원합니다. Bash에서는 $TMUX 값을 확인하여 이를 수행할 수 있지만 zsh에서는 이에 상응하는 방법을 찾을 수 없습니다. zsh에서 이것이 가능합니까?
답변1
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
알아채다급속한 확장변수 대체 후에 발생하므로 변수 값의 백분율 기호를 보호해야 합니다.
답변2
시작되면 tmux는 자신을 시작한 쉘의 환경 변수를 상속받습니다(다른 모든 프로세스와 마찬가지로).
그 시점부터 tmux는 생성된 의사 터미널에 동일한 환경 변수를 할당합니다. 중요한 환경 변수 외에도
$TERM
tmux 서버는 원래 쉘에서 할당한 값을 저장합니다.
다음과 같은 방법으로 쿼리할 수 있습니다.
<C-b>:display-message "$TERM"
내 시스템에서는 tmux가 시작한 모든 의사 터미널이 비슷한 결과를 제공합니다 xterm-256color
.
$TERM=screen
TERM=screen-256color
내 시스템에서는 tmux(vim) 내에서 실행되는 프로그램이 터미널의 색상 기능을 인식할 수 있도록 의사 터미널을 설정했습니다 . 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