Разница между %F{color} и %{$fg[color]%} в командной строке zsh

Разница между %F{color} и %{$fg[color]%} в командной строке zsh

Я заметил, что в вашей подсказке есть два способа установки цвета переднего плана zsh.

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

Обе эти строки дадут синий цвет $в качестве подсказки. Есть ли разница между ними и есть ли предпочтительный способ настройки подсказки?

Если вы хотите указать цветовой код, вы можете сделать $F{160}или какое-то другое число, но вы не можете для %{$fg[160]%}. Это единственное различие между этими двумя вариантами?

решение1

Прямой %F{...}выход обрабатывается напрямую кодом zsh C. Использование $fg[blue]— это доступ к ассоциативному массиву с именем fg. Чтобы это работало, вам нужно вызвать colorsфункцию, которая поставляется с zsh. Для приглашений, которые также полагаются на PROMPT_SUBSTопцию.

Нет большой разницы в том, что производят эти два способа. Первый чище и лучше работает с отслеживанием zsh состояния терминала. Он был добавлен в zsh в 2008 году, тогда как функция цветов была добавлена ​​в 1999 году. В настоящее время вы вряд ли застрянете с zsh, достаточно старым, чтобы не иметь ни одной из этих функций, поэтому нет смысла придерживаться старого способа.

И как вы заметили, %Fможет обрабатывать числа, где ваш терминал поддерживает 88 или 256 цветов. Если вы используете гораздо более новый zsh, вы также можете указать шестнадцатеричные триплеты, например, %F{#0000ff}если у вас есть терминал с истинным цветом (или загрузить модуль zsh/nearcolor).

Связанный контент