Повторно оценивайте выражение запроса каждый раз, когда приглашение отображается в zsh

Я настраиваю свою zsh-подсказку, основанную на теме далласа и тему dstufft от oh-my-zsh . Мне нравится, как в далласе есть различные разделы подсказки, содержащиеся в переменных, что значительно облегчает понимание того, что происходит.

Проблема в том, что эти строки оцениваются один раз для расширения. Поэтому, когда я пытаюсь использовать что-то динамическое, например ${PWD/#$HOME/~} dstufft, оно больше не обновляется динамически.

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

4 Solutions collect form web for “Повторно оценивайте выражение запроса каждый раз, когда приглашение отображается в zsh”

Убедитесь, что prompt_subst опция prompt_subst . При необходимости добавьте следующую строку в ~/.zshrc :

 setopt prompt_subst 

Это означает, что zsh повторно оценивает строку приглашения каждый раз, когда отображается приглашение. Затем убедитесь, что вы назначаете PS1 (или некоторую другую переменную, которая используется темой приглашения) по желанию:

 PS1='${PWD/#$HOME/~}' 

Одиночные кавычки защищают специальные символы, такие как $ от оценки, когда вы устанавливаете переменную.

В порядке,

Мне просто нужно скрыться от моих знака. Например:

 ${PWD/#$HOME/~} \${PWD/#\$HOME/~} 

В zsh для этого нужно использовать % escapes. Например, вместо ${PWD/#$HOME/~} (как ваш пример) просто используйте %~ .

Прочтите zshall(1) и найдите ПРОСТОЙ PROMPT ESCAPES (это слишком долго, чтобы процитировать здесь).

В zsh precmd может делать что угодно (например, устанавливать переменную) перед каждым приглашением:

 function precmd() { current_git_branch=`git rev-parse --abbrev-ref HEAD` } 

http://zsh.sourceforge.net/Doc/Release/Functions.html

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

(precmd is zsh-only – в bash есть $PROMPT_COMMAND .)

  • Строка состояния экрана для отображения текущей директории для оболочки zsh / bash
  • alias -g '$ {1 + "$ @"}' = '"$ @"', что он делает?
  • Как обновить приглашение на изменение каталога
  • Формат запроса zsh в соответствии со значением переменной среды
  • Как настроить Ctrl + w как удалить слово в zsh
  • mv * (исключение ошибки «can not move»)
  • Является ли «Арифметическое расширение» ожидаемым действием на vars внутри `[[` tests?
  • Как я могу использовать «emulate sh» в zsh для работы с ». myscript.sh»?
  • Выберите пользовательский запрос zsh на основе того, какой эмулятор я использую
  • удалить хост из списка завершения для ssh в zsh
  • запуск экрана в оболочке не может найти сеансы, но запуск экрана во время входа в ssh может
  • Linux и Unix - лучшая ОС в мире.