Я хотел бы иметь читаемый цветной путь. Например, вместо того, чтобы просто использовать% ~ для возврата, ~/path/to/foo
я хотел бы отформатировать его, ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
чтобы выделить разделители пути.
Могу ли я определить содержимое PROMPT, чтобы выражение пути переоценивалось на каждом дисплее? Что-то вроде ${${(%):-%~}//\//_some_format_expression/}
явно не работает.
Или я должен взломать это дальше и заставить сбросить значение PROMPT каждый раз, когда мы меняем каталог?
Любое решение, достигающее цели форматирования пути, будет приветствоваться.
Благодарность :)
Ответы:
ЗШ
Попробуй это:
Вот разбивка подсказки:
%{...%}
- escape-последовательность$(pwd|grep --color=always /)
- напечатать текущий каталог и выделить/
- цвет будет зависеть от переменной среды $ GREP_COLORS (или ее значения по умолчанию) - полужирный красный является значением по умолчанию%${#PWD}G
- используйте длину в символах имени текущего каталога в качестве значения сбоя. Это заставляет оболочку учитывать это длину предыдущей последовательности символов (после "%{
") вместо фактической длины строки, которая включает escape-последовательности ANSI. Это предохраняет оболочку от путаницы относительно позиции курсора относительно конца подсказки.- - - - - - - это конец части, которая отвечает на ваш вопрос - - - - - - -
%(!.%F{red}.%F{cyan})
- если это привилегированная оболочка (root), установите цвет переднего плана на красный, в противном случае - голубой%n
- вывести имя пользователя%f
- сбросить цвет переднего плана на значение по умолчанию@
- буквальный знак%F{yellow}
- сделать цвет переднего плана желтым%m
- вывести имя хоста%f
- сбросить цвет переднего плана на значение по умолчанию%(!.%F{red}.)
- если это привилегированная оболочка (root), установите цвет переднего плана на красный%#
- вывести#
для привилегированной оболочки или%
для непривилегированной%f
- сбросить цвет переднего плана на значение по умолчаниюЯ ставлю путь первым в этой подсказке для акцента, так как вопрос касается пути.
Вот версия для zsh, которая меняет цвет косой черты в зависимости от того, являетесь ли вы пользователем root (привилегированным), манипулируя этой
$GREP_COLORS
переменной:удар
Вы можете сделать аналогичное приглашение в Bash. В этом примере я сначала указал имя пользователя и хоста, а цвет слешей также меняется, когда UID равен 0. Предупреждение: это перезаписывает
$PS1
переменную приглашения Bash . Это не должно быть проблемой, если вы не делаете что-то особенное или не ожидаете, что поведение изменится, когда вы установите эту переменную напрямую, и это действует. Кроме того, здесь используется переменная с именем "usercolor
", которая может конфликтовать с чем-то другим, хотя все это можно поместить в функцию, а переменная объявлена локальной.Я воспользовался тем фактом, что в Bash нет функции «сбоя» в zsh, чтобы использовать подстановку расширения параметров для условного окрашивания слешей (вместо использования grep).
источник
PS1="$(pwd)"; PS1="${debian_chroot:+($debian_chroot)}\[$bldgrn\]\u@$(fgcolor $hostnamecolor)\h$(resetcolor)\[$txtrst\]:\[$bldblu\]${PS1//\//$txtred/$bldblu}\[\e[00m\]$bldred\$(parse_git_branch)\[$txtrst\] \[$undcyn\]\T \d\[$txtrst\] 95\$ "
цвета, определенные в github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shПосле некоторого ухода я могу предоставить решение, которое переопределит
chpwd
:my_path
переменной? Я не могу напрямую заменить / внутри% ~ ...doprompt
вероятно, будет чище.источник
Чистое решение Zsh:
${(%):-%~}
это текущий путь.${xxxxx//\//${PR_BOLD_RED}/%f}
заменяет каждые / в ххххх жирным красным цветомЯ использовал двойные кавычки в моих тестах, которые не позволяют подстановку. Все отлично работает с одинарными кавычками.
источник
$PR_BOLD_RED
определить в другом месте. Я должен использовать вPROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
том числе очень странный выход из закрывающей фигурной скобки (только) после второй «красной».Вот моя попытка (на основе NicDumZ):
Разница в том, что я использую цветной путь, поэтому мне нужно вернуться к исходному цвету для пути, как только косая черта будет окрашена. В моем случае путь обычно желтый, а косая черта окрашивается в пурпурный цвет, а затем возвращается к желтому. Я также предпочитаю использовать последовательности% F% f, поскольку они кажутся мне более читабельными.
источник