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

Во-первых, важно отметить, что не только поведение пользовательской программы не определено, но и поведение компилятора не определено. Аналогично, UB не встречается во время выполнения, это свойство исходного кода.

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

Тогда не всегда возможно знать если программа имеет UB или нет. Пример:

int * ptr = calculateAddress();
int i = *ptr;

Зная, может ли это быть UB или нет, потребуется знание всех возможных значений, возвращаемых calculateAddress(), что невозможно в общем случае (см. « Проблема с остановкой "). У компилятора есть два варианта:

  • Предположим, что у ptr всегда будет действительный адрес
  • вставить проверки времени выполнения, чтобы гарантировать определенное поведение

Первый вариант создает быстрые программы и ставит бремя избежать нежелательных эффектов на программиста, тогда как второй вариант обеспечивает более безопасный, но более медленный код.

Стандарты C и C ++ оставляют этот выбор открытым, и большинство компиляторы выбирают первый, в то время как Java, например, задает второй.


Почему поведение не определено реализацией, но неопределено?

Реализация -определенные средства ( N4296 , 1.9§2):

Некоторые аспекты и операции абстрактной машины описаны в этом Международном стандарте в качестве реализации (например, sizeof (int)). Они составляют параметры абстрактной машины. Каждая реализация должна включать документацию, описывающую ее характеристики и поведение в этих отношениях. Такая документация должна определять экземпляр абстрактной машины, которая соответствует этой реализации (упоминается как «соответствующий экземпляр» ниже).

blockquote>

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

Запись на случайный ненулевой Недопустимый указатель - одна из самых непредсказуемых вещей, которые вы можете сделать в программе, поэтому для этого потребуется также сократить время выполнения. До того, как у нас были MMU, вы могли бы уничтожить аппаратное обеспечение , написав неверный адрес, который приходит очень рядом с носовыми демонами; -)

91
задан Mnementh 27 March 2009 в 13:29
поделиться

3 ответа

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

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

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

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

47
ответ дан Bryan Oakley 24 November 2019 в 06:22
поделиться

Ответ Bryan Oakley выше имеет незначительный сбой, как на него уже указали и решение, предлагаемое Andrew Marshall, хотя он не несет незначительный сбой, тем не менее, он не делает это очевидным для слишком большой настройки на цветах используемый.

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

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

Передний план и Фон. другая ключевая информация - то, что для [1 124] Foreground и баккара K грунт можно определить то, что они хотят с [1 126] 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}\$ "

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

[еще 1118] сопутствующая информация найдена ниже.

Быстрая информация на правой стороне. , Например, добавляя метку времени. См. https://superuser.com/a/1251045/290299. Конечно, на это можно нанести цветную маркировку, например, с некоторым голубым/purple-ish окрашивают, как это:

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

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

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

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

2
ответ дан 24 November 2019 в 06:22
поделиться

Поместите это в ~ / .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%}%% "
229
ответ дан 24 November 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: