Як я можу змінити колір запиту в zsh (відмінний від звичайного тексту)?


121

Щоб краще розпізнати початок і кінець виводу в командному рядку, я хочу змінити колір мого підказки, щоб він помітно відрізнявся від виводу програм. Коли я використовую zsh, хтось може мені підказати?

Відповіді:


58

Ось приклад того, як встановити червоний рядок:

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

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

Докладніше про послідовності втечі див. У статті вікіпедії щодо кодів аварійних відбітків ANSI


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

3
@ erikb85: чому ти кажеш, що це неправильно? Чи можу я щось зробити, щоб зробити відповідь кращою? Для мене виконання вищезазначеного дає мені червоний знак долара, тому я не розумію, чому ви вважаєте, що це неправильно.
Брайан Оуклі

4
Він працює, але $ перед рядком змушує zshrc глюк. Текст ставиться зліва, коли я використовую табуляцію. Я віддаю перевагу @Joe the Person відповідь
Moebius

1
Я згоден @Moebius Я хотів, щоб цей працював, було зрозуміло і просто, але він повністю переплутав вкладку на cd
diek

2
Я думав, що zsh не потрібні божевільні дивні речі про втечу від ANSI ... має бути краща відповідь ...
Charlie Parker

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
балки

Ви використовуєте ZSH4? Я не думаю, що це працює на версіях менше 4.3.11. Якщо у вас є остання версія, можливо, це не використання потрібних файлів.
Джо Персона

Які дійсні значення кольору?
чакрит

12
це %{...%}означає, що вміст буде інтерпретуватися як буквальна послідовність виходу, тому курсор не буде рухатися під час друку послідовності. Якщо ви цього не використовуєте, кольорові коди можуть насправді переміщувати курсор і створювати небажані ефекти. Про це задокументовано у Visual Effectsрозділі на сторінці чоловіка zshmisc
Bruno Penteado

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
спрацювали

2
Дивно. Підходить для мене на OS X & Ubuntu 10.04.
Ендрю Маршалл

@Andrew Marshall Так, але це швидше з чим працювати autoload.
Джо Персона

@ fireDude67 Як встановити autoload on?
балки

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

23

Доступні кольори:

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 Каталіна просить, щоб відтепер zsh стала оболонкою за замовчуванням, я думаю, що ще кілька людей можуть захотіти налаштувати своє підказку і, можливо, приходять сюди для отримання відповіді. Отже, я подумав, що спробую дати більш широке резюме та торкнутися інших дуже тісно пов'язаних понять, які дозволяють зробити більше налаштування.

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

Передній план та фон. Інший ключовий інформації є те , що для F Колір тексту і 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}

Тепер у них виникає проблема: вони перемістять курсор, що призведе до некрасивого відмітки при вкладці (для автоматичного завершення). Рішення - просто оточити послідовності втечі %{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 і пошук ПРОСМОТРУВАННЯ, щоб дізнатися всі правила для вашої конкретної установки 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.