Подтвердить что ты не робот

Как изменить цвет моего приглашения в zsh (отличается от обычного текста)?

Чтобы лучше узнать начало и конец вывода в командной строке, я хочу изменить цвет моего приглашения, чтобы он заметно отличался от вывода программ. Как я использую zsh, может ли кто-нибудь дать мне подсказку?

4b9b3361

Ответ 1

Вот пример того, как установить красное приглашение:

PS1=$'\e[0;31m$ \e[0m'

Магия - это \e[0;31m (включить красный передний план) и \e[0m (отключить атрибуты символов). Они называются escape-последовательностями. Различные escape-последовательности дают вам разные результаты: от абсолютного позиционирования курсора до цвета, от возможности изменить строку заголовка вашего окна и т.д.

Подробнее о escape-последовательностях см. запись в википедии в escape-кодах ANSI

Ответ 2

Поместите это в ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

Поддерживаемые цвета:
red, blue, green, cyan, yellow, magenta, black и white (из этого ответа), хотя на разных компьютерах могут быть разные допустимые параметры.

Цветовые коды объемного звучания (и любые другие непечатаемые символы) с %{....%}. Это для правильной работы переноса текста.

Кроме того, вот как вы можете заставить это работать с обрезкой каталогов из здесь.

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "

Ответ 3

Zsh поставляется с цветными подсказками. Попробуйте

autoload -U promptinit && promptinit

а затем prompt -l перечисляет доступные приглашения, -p fire превью на приглашение "огонь", -s fire устанавливает его.

Когда вы будете готовы добавить приглашение добавить что-то вроде этого ниже строки автозагрузки выше:

prompt fade red

Ответ 4

Я не думаю, что autoload -U colors && colors больше нужен, и можно просто сделать:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

для достижения того же результата, что и ответ FireDude. См. документацию ZSH для получения дополнительной информации.

Ответ 5

Я обнаружил, что с zsh5 (по умолчанию на Debian Jessie) все эти решения работают:

  • $'\e[00m
  • $fg[white]
  • $fg{white}

Теперь у них есть проблема: они будут перемещать курсор, что приводит к уродливой надписи при табуляции (для автозаполнения). Решение состоит в том, чтобы окружить escape-последовательности с помощью %{FOOBAR%}. Понадобился время, чтобы понять это. Для 2-го и 3-го решений требуется загрузка модуля colors. Чтобы оставить 1-е решение доступным для чтения, просто определите переменные для цветов, которые вы используете.

Ответ 6

Чтобы получить подсказку с цветом в зависимости от состояния выхода последних команд, вы можете использовать это:

PS1='%(?.%F{green}.%F{red})%[email protected]%m:%~%# %f'

Просто добавьте эту строку в свой ~/.zshrc.

В документации перечислены возможные заполнители.

Ответ 7

man zshall и поиск PROMPT EXPANSION

Прочитав существующие ответы здесь, некоторые из них конфликтуют. Я пробовал различные подходы к системам, работающим с zsh 4.2 и 5+, и обнаружил, что причина, по которой эти ответы противоречат друг другу, заключается в том, что они не говорят, к какой версии ZSH они нацелены. В разных версиях для этого используется другой синтаксис, а для некоторых из них требуются различные автозагрузки.

Итак, лучший вариант, вероятно, для человека zshall и поиск PROMPT EXPANSION, чтобы узнать все правила для вашей конкретной установки zsh. Обратите внимание на комментарии, такие вещи, как "Я использую Ubuntu 11.04 или 10.4 или OSX". Не очень значимы, поскольку неясно, какая версия ZSH вы используете. Ubuntu 11.04 не подразумевает более новую версию ZSH, чем Ubuntu 10.04. Может быть несколько причин, по которым была установлена ​​более старая версия. В этом случае более новая версия ZSH не подразумевает, какой синтаксис использовать, не зная, какая версия ZSH она есть.