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


122

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

Ответы:


59

Вот пример того, как установить красную подсказку:

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

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

Для получения дополнительной информации о escape-последовательностях см. Статью в Википедии о escape-кодах ANSI.


3
Я использую PROMPT = '[%!]' В моем .zshrc. Как его раскрасить? Я неудачно запускаю PROMPT = '\ e [0; 31m [%!] \ E [0m' в моем .zshrc.
Лео Леопольд Герц 준영

3
@ erikb85: почему ты говоришь, что это неправильно? Что я могу сделать, чтобы ответить лучше? Для меня выполнение описанного выше дает мне красный знак доллара, поэтому я не понимаю, почему вы думаете, что это неправильно.
Bryan Oakley

4
Он работает, но $ перед строкой заставляет zshrc давать сбой. Когда я использую табуляцию, текст помещается слева. Я предпочитаю ответ @Joe the Person
Мебиус

1
Я согласен @Moebius, я хотел, чтобы это работало, это было ясно и просто, но это полностью испортило вкладку на компакт-диске
diek

2
Я думал, что zsh не нужны сумасшедшие странные побеги ANSI ... должен быть ответ получше ...
Чарли Паркер

264

Поместите это в ~/.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
Согласен, безусловно, лучший ответ (к счастью, этот ответ был третьим результатом Google;)
new123456

3
у меня не работает. :(zsh: colors: function definition file not found
balki 08

Вы используете ZSH4? Я не думаю, что это работает на версиях ниже 4.3.11. Если у вас последняя версия, возможно, в ней используются неправильные файлы.
Человек Джо

Какие допустимые значения цвета?
chakrit

12
что %{...%}означает , что содержание будет интерпретироваться как буквальная управляющей последовательностью, так что курсор обыкновения перемещаться во время печати последовательности. Если вы этого не используете, цветовые коды могут фактически перемещать курсор и создавать нежелательные эффекты. Это задокументировано в Visual Effectsразделе на странице руководства zshmisc
Бруно Пентедо,

69

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

autoload -U promptinit && promptinit

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

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

prompt fade red

Есть ли способ раскрасить все темы? Мне нравится подсказка Walters, но она должна быть красного цвета.
Пэт Майрон

25

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

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

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


FYI. Я только что пробовал в Ubunutu 11.04, и цвета у меня не работали безautoload -U colors && colors
dpc.pw

2
Weird. У меня работает на OS X и Ubuntu 10.04.
Эндрю Маршалл

@ Эндрю Маршалл: Да, но он, скорее всего, будет работать autoloadдальше.
Человек Джо

@ fireDude67 Как настроить autoload on?
balki 08

1
Если вам это не нужно autoload -U colors, это означает, что в вашем дистрибутиве он уже есть в каком-то другом файле инициализации zsh. Вы все равно должны включать его в сценарии, которыми собираетесь поделиться с другими.
kindall

24

Доступные цвета:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


Доступные переменные:

  • %F{118} (От 1 до 256)
  • $FG[018] (От 1 до 256)
  • $fg[magenta] (пурпурный, красный, белый, желтый, черный, синий, голубой, зеленый)

Пример подсказки:

PS1='%(?.%F{green}.%F{green})%n@%m:%~%# %f'

Захватить

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

Захватить


Установка:

Определение переменных (PS1 / PROMPT) необходимо добавить в ~/.zshrc

Мы также можем переопределить переменную PS1 в текущем приглашении, чтобы сразу проверить ее (изменения не сохраняются).


15

Ответ Брайана Окли выше имеет сбой, как уже указывалось, и решение, предложенное Эндрю Маршаллом, хотя оно и не несет сбоя, тем не менее, оно не делает его очевидным из-за слишком большой настройки используемых цветов.

Поскольку macOS Catalina теперь требует, чтобы zsh был оболочкой по умолчанию, я думаю, что еще несколько человек могут захотеть настроить свое приглашение и, возможно, придут сюда за ответом. Итак, я подумал, что попытаюсь дать более широкое резюме и коснуться других очень тесно связанных понятий, которые позволяют больше настраивать.

Трехзначные коды для различных цветов. Прежде всего, здесь мы можем найти трехзначные коды для разных цветов: https://unix.stackexchange.com/a/124409/194343 . Например, 214 - это какой-то оранжевый цвет.

Передний план и задний план. Другая ключевая информация заключается в том, что для основных цветов F oreground и bac K можно определить, что они хотят, с помощью F и K соответственно. Источник - руководство по визуальным эффектам zsh: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Так, например, следующие две команды

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

укажите имя хоста оранжевым цветом с черным фоном, за которым следует двоеточие на белом фоне с черным фоном, за которым следует текущий рабочий каталог ярко-синим цветом с черным фоном, за которым следует белый знак доллара с черным фоном.

Более подробную информацию можно найти ниже.

Подсказка с правой стороны. Например, добавление метки времени. См. Https://superuser.com/a/1251045/290299 . Конечно, это может быть цветовая кодировка, например, с каким-нибудь светло-голубым / фиолетовым цветом, например:

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

Цвета для ls. Прочитав руководство для ls, можно, например, активировать цвета для lsиспользования следующих двух команд:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Наконец, в качестве последнего замечания, которое я не тестировал, поскольку я доволен своей конфигурацией, другой способ может заключаться в том, чтобы кто-то установил порт coreutilsиз MacPorts, а затем использовал gdircolors(источник: https://unix.stackexchange.com/a/174596 / 194343 ). (Я могу отредактировать эту последнюю часть в будущем, поскольку все вышеперечисленное - связанные части, которые делают повседневную жизнь намного более увлекательной и с которой легче справляться.)


1
Это очень полезный ответ. Спасибо, что собрали это вместе.
Shaunakde

@shaunakde Добро пожаловать! :)
MightyMouse

4

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

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

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


2

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

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

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

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


Это лучшее решение здесь, большое спасибо.
Эдди Экофо,

2

Попробуйте мой любимый: вставьте

~/.zshrc

эта строка:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

не забывай

source ~/.zshrc

проверить изменения

вы, конечно, можете изменить цвета / цветовые коды :-)


0

man zshall и поиск по запросу БЫСТРЫЕ РАСШИРЕНИЕ

После прочтения существующих ответов здесь некоторые из них противоречат друг другу. Я пробовал различные подходы в системах, работающих под управлением 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.


0

Чтобы дополнить все вышеперечисленные ответы, еще один удобный прием - поместить настройки цветных подсказок в функцию zsh. Там вы можете определить локальные переменные для псевдонимов более длинных команд, например, rc=$reset_colorили определить свои собственные цветовые переменные. Не забудьте поместить его в свой .zshrcфайл и вызвать функцию, которую вы определили:

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.