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

StackOverflow https://stackoverflow.com/questions/689765

  •  22-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Поддерживаемые цвета:
Красный, синий, зеленый, голубой, желтый, пурпурный, черный и белый (из этот ответ), хотя на разных компьютерах могут быть разные допустимые параметры.

Окружите цветовые коды (и любые другие непечатаемые символы) %{....%}.Это необходимо для корректной работы переноса текста.

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

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

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

autoload -U promptinit && promptinit

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

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

prompt fade red

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

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

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

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

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

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top