![Разница между %F{color} и %{$fg[color]%} в командной строке zsh](https://rvso.com/image/171063/%D0%A0%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%25F%7Bcolor%7D%20%D0%B8%20%25%7B%24fg%5Bcolor%5D%25%7D%20%D0%B2%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20zsh.png)
Я заметил, что в вашей подсказке есть два способа установки цвета переднего плана 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).