Сократить путь в приглашении zsh

Bash есть опция PROMPT_DIRTRIM , например, когда я устанавливаю PROMPT_DIRTRIM=3 , тогда длинный путь, такой как:

 user@computer: /this/is/some/silly/path 

вместо этого будет выглядеть следующим образом:

 user@computer: .../some/silly/path 

Существует ли аналогичный вариант для zsh ?

Чтобы получить аналогичный эффект bash , в том числе ... , попробуйте:

 %(4~|.../%3~|%~) 

Это проверяет, если длина пути не менее 4 элементов ( %(4~|true|false) ), и, если true, печатает некоторые точки с последними 3 элементами ( .../%3~ ), в противном случае полный путь печатается %~ .


Я заметил, что bash похоже, по-разному сокращает пути в домашнем каталоге, например:

 ~/.../some/long/path 

Для подобного эффекта вы можете использовать:

 %(5~|%-1~/…/%3~|%4~) 

Это проверяет, превышает ли путь более 5 элементов, и в этом случае печатает первый элемент ( %-1~ ), некоторые точки ( /…/ ) и последние 3 элемента. Это не совсем то же самое, что и пути, которые не находятся в вашем домашнем каталоге, также будут иметь первый элемент в начале, тогда как bash просто печатает точки в этом случае. Так

 /this/…/some/silly/path 

вместо

 .../some/silly/path 

Но это не обязательно плохо.

В дополнение к другим приведенным здесь ответам вы также можете использовать %< чтобы усечь путь к заданному числу символов . Я считаю, что это предпочтительнее использовать %<n>d , поскольку отдельные элементы пути могут, очевидно, быть довольно длинными сами по себе. Использование %< дает гораздо более предсказуемую максимальную длину запроса.

Например, чтобы усечь элемент пути с расширением тильды ( %~ ) до 15 символов, заменив удаленные символы на .. , вы можете сделать что-то вроде этого:

 PROMPT='%n@%m:%15<..<%~%<<%# ' 

Это задокументировано в руководстве Zsh в разделе « Подсветка» , прямо в конце страницы.

Вы можете использовать расширение %3d prompt :

 /home/cuonglm/.config/fish/functions $ PS1='%3d $ ' .config/fish/functions $ 

Общая форма – это %d , если любое положительное целое число d указывает конечные компоненты для отображения текущего пути, нулевое среднее показывает весь путь, отрицательное целое означает ведущий путь для отображения:

 .config/fish/functions $ PS1='%-2d $ ' /home/cuonglm $ 

См. man zshmisc или man zshmisc

 %d %/ Current working directory. If an integer follows the '%', it specifies a number of trailing components of the current working directory to show %~ As %d and %/, but if the current working directory starts with $HOME, that part is replaced by a '~'. 

Итак, чтобы получить что-то похожее на PROMPT_DIRTRIM=3 , вы можете использовать %3d или %3~ , например

 % mkdir -p ~/a/b/c/d % cd ~/a/b/c/d % PS1='%n@%m: %3d%% ' user@computer: b/c/d%