Скоротіть шлях у запиті zsh


18

Bashє PROMPT_DIRTRIMваріант, наприклад, коли я встановлюю PROMPT_DIRTRIM=3, то довгий шлях, як:

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

натомість відображатиметься як:

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

Чи існує подібний варіант для zsh?

Відповіді:


22

Для отримання подібного ефекту bash, зокрема ..., спробуйте:

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

Це перевіряє, якщо шлях має принаймні 4 елементи ( %(4~|true|false)) і, якщо це правда, друкує деякі точки з останніми 3 елементами ( .../%3~), інакше буде надруковано повний шлях %~.


Я помітив, що, bashздається, скорочуються шляхи до домашнього каталогу по-різному, наприклад:

~/.../some/long/path

Для подібного ефекту ви можете використовувати:

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

Це перевіряє, чи довший шлях не більше 5 елементів, і в цьому випадку друкує перший елемент ( %-1~), деякі точки ( /…/) та останні 3 елементи. Це не зовсім те саме, що шляхи, яких немає у вашому домашньому каталозі, також матимуть перший елемент на початку, тоді як bashпросто виводить точки в цьому випадку. Так

/this/…/some/silly/path

замість

.../some/silly/path

Але це не обов'язково може бути поганим.


1
Перша версія мені подобається краще, але зауважте, що вона відображається ~/a/bяк .../a/bзамість ~/a/b. Щоб виправити це, ви можете використовувати %(5~|…/%3~|%~).
мамар

Для тих, хто не входить до zsh (як я), ви хочете використовувати цей синтаксис із PROMPTзмінною оточення у вашому .zprofile, наприклад:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan H.

1
@RyanH. Дякую, читаючи свою відповідь ще раз, я помічаю, що я ніколи не згадував, де ці налаштування потрібно зробити. Мені доведеться це виправити. Дві невеликі речі щодо вашого коментаря: налаштування для інтерактивних сесій оболонки слід робити, .zshrcі насправді немає необхідності в таких exportвнутрішніх параметрах оболонки PROMPT.
Adaephon

@Adaephon Дякую за інформацію. Я виправлю! :)
Ryan H.

8

Окрім інших наведених тут відповідей, ви також можете використовувати %<для обрізання шляху до заданої кількості символів . Мені здається, що це краще використовувати %<n>d, оскільки окремі елементи шляху, очевидно, можуть бути досить довгими самі по собі. Використання %<дає набагато більш передбачувану максимальну довжину підказки.

Наприклад, щоб урізати ліворуч елемент шляху з розширенням tilde ( %~) до 15 символів, замінивши видалені символи на .., ви можете зробити щось подібне:

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

Це задокументовано у посібнику Zsh у розділі Підказка про розширення , що знаходиться в кінці сторінки.


4

Ви можете використовувати %3d оперативне розширення :

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

Загальною формою є %d, якщо будь-яке додатне ціле число dвказує кінцеві компоненти для показу поточного шляху, нульове значення показує весь шлях, негативне ціле число означає провідний шлях для показу:

.config/fish/functions $ PS1='%-2d $ '
/home/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% 

Це не відображатиме "...", як у баші.
Елронд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.