환경 변수 값을 기반으로 zsh 프롬프트 형식을 지정합니다.

환경 변수 값을 기반으로 zsh 프롬프트 형식을 지정합니다.

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

관련 정보