Я хотел бы иметь читаемый цветной путь. Например, вместо того, чтобы просто использовать % ~ для возврата ~/path/to/foo
Я хотел бы отформатировать его к ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
выделить разделители пути.
Я могу определить контент ПОДСКАЗКИ так, чтобы выражение пути было переоценено на каждом дисплее? Что-то как ${${(%):-%~}//\//_some_format_expression/}
очевидно, не работает.
Или я должен взломать это далее и вынудить БЫСТРОЕ значение быть сброшенным каждый раз, когда мы изменяем каталог?
Любое решение, достигающее цели форматирования пути, приветствовалось бы.
Спасибо :)
zsh
Попробуйте это:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Вот разбивка подсказки:
%{...%}
- escape-последовательность$(pwd|grep --color=always /)
- распечатайте текущий каталог и выделитесь /
- цвет будет зависеть от переменной среды $GREP_COLORS (или ее значение по умолчанию) - полужирный красный является значением по умолчанию%${#PWD}G
- используйте длину в символах названия текущего каталога как значение незначительного сбоя. Это заставляет оболочку считать это длиной последовательности предшествующего символа (после того, как"%{
") вместо фактической длины строки, которая включает escape-последовательности ANSI. Это мешает оболочке быть перепутанной положением курсора относительно конца подсказки.%(!.%F{red}.%F{cyan})
- если это - привилегированная оболочка (корень), выбирает основной цвет к красному, в других отношениях голубому цвету%n
- произведите имя пользователя%f
- сбросьте основной цвет к значению по умолчанию@
- литеральный знак at sign%F{yellow}
- сделайте основной цвет желтым%m
- произведите имя хоста%f
- сбросьте основной цвет к значению по умолчанию%(!.%F{red}.)
- если это - привилегированная оболочка (корень), выбирает основной цвет к красному%#
- вывод a #
для привилегированной оболочки или %
для непривилегированного%f
- сбросьте основной цвет к значению по умолчаниюЯ поместил путь сначала в эту подсказку для акцента, так как вопрос касается пути.
Вот версия для zsh, который изменяет цвет наклонной черты в зависимости от того, являетесь ли Вы корнем (привилегированным) путем управления $GREP_COLORS
переменная:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Bash
Можно сделать подобную подсказку в Bash. В этом примере я поместил пользователя и имя хоста сначала, и цвет наклонных черт также изменяется, когда UID 0. Предупреждение: это перезаписывает Bash $PS1
быстрая переменная. Это не должно быть проблемой, если Вы не сделаете что-то специальное, или Вы ожидаете, что поведение изменится, когда Вы устанавливаете ту переменную непосредственно, и это в действительности. Кроме того, это использует названную переменную"usercolor
"который может столкнуться с чем-то еще, хотя эта целая вещь могла быть помещена в функцию и переменную, объявленную локальной.
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Я использовал в своих интересах то, что Bash не имеет функции "незначительного сбоя" zsh для использования замены расширения параметра для условной окраски наклонных черт (вместо того, чтобы использовать grep).
После некоторого движения - вокруг, я могу обеспечить переопределение решения chpwd
:
doprompt() {
local my_path=${(%):-%~}
PROMPT="${yourstuff}${my_path//\//${PR_BOLD_RED}/${reset_color}}${otherstuff}"
}
doprompt
chpwd() {
doprompt
# unrelated: set window title
[[ -t 1 ]] || return;
print -Pn "\e]2;%n@%m: %~\a";
}
my_path
var? Я не могу непосредственно заменить / в % ~...doprompt
вероятно, инструмент для очистки.Чистое zsh решение:
PROMPT='%n@%m: %{$PR_BOLD_RED%}${${(%):-%~}//\//${PR_BOLD_RED}/%f}%f '
${(%):-%~}
текущий путь.${xxxxx//\//${PR_BOLD_RED}/%f}
заменяет каждый / в xxxxx полужирным краснымЯ имел использовать двойные кавычки в моих тестах, который не позволяет замену. Все хорошо работает с одинарными кавычками.
$PR_BOLD_RED
определенный в другом месте. Я должен использовать PROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
включая очень странный выход заключительной изогнутой фигурной скобки (только) после второго "красного".
– Paused until further notice.
30.10.2009, 13:47
Вот моя попытка (на основе NicDumZ):
setopt PROMPT_SUBST
# red, green, yellow, blue, magenta, cyan, white, black
# B (bold), K(background color), F(foreground color)
function doprompt {
# this is just the directory (%d could be %~ -- I prefer full path always)
PROMPT='%F{yellow}${${(%):-%d}//\//%F{magenta\}%B/%b%F{yellow\}}%f'
}
function chpwd() {
doprompt
}
Различие - то, что я использую окрашенный путь, таким образом, я должен возвратиться к своему исходному цвету для пути, после того как наклонная черта окрашена. В моем случае путь является обычно желтым, и наклонная черта окрашена с пурпурным, затем это возвращается к желтому. Я также предпочитаю использовать последовательности %F%f, поскольку они кажутся намного более читаемыми для меня.