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

18

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

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

показал бы вместо этого как:

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

Существует ли подобная опция для zsh?

pfnuesel
источник

Ответы:

22

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

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

Это проверяет, является ли путь не менее 4 элементов long ( %(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

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

Adaephon
источник
1
Я как первый вариант лучше, но учтите , что она показывает , ~/a/bкак .../a/bвместо ~/a/b. Чтобы исправить это, вы можете использовать %(5~|…/%3~|%~).
Момар
Для новичков в zsh (таких как я) вы хотите использовать этот синтаксис с PROMPTвашей переменной среды .zprofile, например:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Райан Х.
1
@RyanH. Спасибо, прочитав мой ответ еще раз, я замечаю, что никогда не упоминал, где нужно сделать эти настройки. Я должен буду это исправить. В вашем комментарии есть две небольшие вещи: настройки для интерактивных сессий оболочки должны быть сделаны, .zshrcи нет никакой необходимости в exportкаких-либо внутренних параметрах оболочки, таких как PROMPT.
Adaephon
@Adaephon Спасибо за информацию. Я исправлю! :)
Райан Х.
8

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

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

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

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

wjv
источник
4

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

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

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

.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $
cuonglm
источник
3

См. Http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html или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% 
Mikel
источник
Это не покажет "...", как в bash, хотя.
Elronnd