zsh 프롬프트에서 %F{color}와 %{$fg[color]%}의 차이점

zsh 프롬프트에서 %F{color}와 %{$fg[color]%}의 차이점

프롬프트에서 전경색을 설정하는 방법에는 두 가지가 있다는 것을 알았습니다 zsh.

PROMPT='%F{blue}$'
PROMPT='%{$fg[blue]%}$'

이 두 줄 모두 $프롬프트로 파란색을 생성합니다. 이 둘 사이에 차이점이 있나요? 프롬프트를 설정하는 데 선호되는 방법이 있나요?

색상 코드를 지정하려면 $F{160}또는 다른 번호를 지정할 수 있지만 에서는 할 수 없습니다 %{$fg[160]%}. 이것이 두 옵션의 유일한 차이점입니까?

답변1

직접 %F{...}이스케이프는 zsh C 코드에 의해 직접 처리됩니다. 을(를 ) 사용하면 $fg[blue]이름이 붙은 연관 배열에 액세스하고 있습니다 fg. 이것이 작동하려면 colorszsh와 함께 제공되는 함수를 호출해야 합니다. 옵션 에도 의존하는 프롬프트의 경우 PROMPT_SUBST.

이 두 가지 방법으로 생성되는 내용에는 큰 차이가 없습니다. 전자는 더 깨끗하고 zsh의 터미널 상태 추적과 더 잘 작동합니다. 색상 기능은 1999년에 추가된 반면 2008년에 zsh에 추가되었습니다. 요즘에는 두 기능 중 하나도 부족할 정도로 오래된 zsh에 갇힐 가능성이 거의 없으므로 더 이상 이전 방식을 고수할 필요가 없습니다.

그리고 아시다시피 은(는) %F터미널이 88색 또는 256색을 지원하는 숫자를 처리할 수 있습니다. 훨씬 최신 zsh를 실행하는 경우 트루 %F{#0000ff}컬러 터미널이 있는 경우(또는 zsh/nearcolor 모듈을 로드하는 경우)와 같이 16진수 삼중항을 지정할 수도 있습니다.

관련 정보