缩短zsh提示中的路径


18

BashPROMPT_DIRTRIM选项,例如,当我设置时PROMPT_DIRTRIM=3,则是一个长路径,例如:

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

而是显示为:

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

是否存在类似的选择zsh

Answers:


22

要获得类似的效果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

但这不一定是一件坏事。


1
我更喜欢第一个版本,但请注意,它显示~/a/b为,.../a/b而不是~/a/b。要解决此问题,您可以使用%(5~|…/%3~|%~)
momar '16

对于zsh的新手(例如我),您想将此语法与PROMPT环境变量一起使用.zprofile,例如:EXPORT PROMPT="%(5~|%-1~/…/%3~|%4~)"
Ryan

1
@RyanH。谢谢,再次阅读我的答案后,我注意到,我从未提及需要在这些位置进行设置。我将不得不解决该问题。关于您的注释的两件小事:应该进行交互式Shell会话的设置,.zshrc并且实际上不需要export任何shell内部参数,例如PROMPT
阿达丰

@Adaephon感谢您的信息。我会解决的!:)
Ryan H.

8

除了此处给出的其他答案外,您还可以使用%<截断路径以获取给定数量的字符。我发现这比使用更好%<n>d,因为各个路径元素本身可能显然很长。使用将%<产生可预测的最大提示长度。

例如,要将使用代字号扩展(%~)的path元素左截为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.htmlman 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% 

但是,这不会像bash一样显示“ ...”。
Elronnd'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.