Zsh: Расширение хешированных имен каталогов в подсказке

При работе при Debian Lenny сделайте это:

apt-get install bash-completion

Затем пойдите для ~/.bash_profile, чтобы позволить ему локально или/etc/profile добавить его в масштабе всей системы. Вставьте следующее в:

if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi
3
22.11.2014, 05:15
2 ответа

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

Для сокращения корневого каталога только установите опция prompt_subst (это может потребовать добавляющих дополнительных обратных косых черт в местах в подсказке). Вместо % ~ или % / , используйте ручное расширение от $PWD .

setopt prompt_subst
PS1='%B${${PWD/#%$HOME%/\~\/}/#$HOME/\~}\$%b '

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

setopt prompt_subst
chpwd () {
  case $PWD in
    $HOME/*) prompt_PWD=\~/${PWD#$HOME};;
    $HOME) prompt_PWD=\~;;
    *) prompt_PWD=$PWD;;
  esac
}
PS1='%B$prompt_PWD\$%b '

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

chpwd () {
  case $PWD in
    $HOME/*) prompt_PWD=\~/${PWD#$HOME};;
    $HOME) prompt_PWD=\~;;
    /home/*) prompt_PWD=${(%)${:-%~}};;
    *) prompt_PWD=$PWD;;
  esac
}
1
27.01.2020, 21:31

Добавление завершающего / к имени каталога даст желаемый эффект.

0
27.01.2020, 21:31

Теги

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