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

Я экспериментирую с переходом от bash к zsh и, в частности, с хэш-функцией; так что

hash -d Do=~/Downloads 

означает, что я могу ввести cd Do чтобы немедленно перейти в этот каталог. Ницца. Но в подсказке директория указана как ~Do вместо ~/Downloads что я бы предпочел увидеть. Есть ли способ использования хеш-значений каталога, чтобы запрос расширялся до полного имени каталога (с начальным ~ если в каталоге пользователя)?

2 Solutions collect form web for “Zsh: расширение хэшированных имен каталогов в приглашении”

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

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

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

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

 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 аббревиатура только каталогов, которые начинаются с /home (предположительно других домашних каталогов пользователей) и которые не находятся в вашем домашнем каталоге.

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

Добавление конечного / к имени каталога приведет к желаемому эффекту.

  • Исходный контроль и символическая ссылка для .zhistory
  • Завершить только в начале слова
  • запуск экрана в оболочке не может найти сеансы, но запуск экрана во время входа в ssh может
  • Безопасно ли удалить каталог .oh-my-zsh?
  • Сохраните пробел после завершения для некоторых символов в zsh
  • Запретить расширение переменных в контурах
  • Как я могу перечислить все переменные оболочки?
  • zle - я не могу найти, почему Ctrl + R не работает для non-root
  • Лучше ли узнать местоположение скрипта, которое является частью модуля zprezto?
  • Надежная идентификация пути к каталогу, содержащему запущенный скрипт
  • Локальные `set -e` для функций
  • Interesting Posts

    Awk для печати только соответствующего слова

    Настройка nginx для моих собственных целей

    Плохая производительность редактирования текста из драйвера Radeon с открытым исходным кодом; должен ли я установить проприетарный драйвер или попытаться исправить это?

    Если бы я записал CDROM, то всегда получаю точную копию CDROM?

    Как получить доступ к / неизвестному типу файла?

    Убить все процессы, связанные с приложением

    Как я могу разрешить «дубликаты» в yum?

    Как найти использование полосы пропускания / байты, переданные / полученные в течение определенного периода времени

    Обоснование найти отображение команды. каталог

    Интерфейс часов не найден

    Проблема с графикой гостевой машины KVM

    Почему сортировки корневых процессов не будут сортироваться при попытке сортировки пользователей на основе количества запущенных процессов?

    Обновление скручивания в Centos 5.6

    Минимальная командная строка Distro

    Как настроить серверную сеть на Debian?

    Linux и Unix - лучшая ОС в мире.