Bash
有PROMPT_DIRTRIM
选项,例如当我设置 时PROMPT_DIRTRIM=3
,然后是一条长路径,例如:
user@computer: /this/is/some/silly/path
将显示为:
user@computer: .../some/silly/path
是否存在类似的选项zsh
?
答案1
要获得与 类似的效果bash
,即包括...
,请尝试使用:
%(4~|.../%3~|%~)
在您的PROMPT
变量(也可能PS1
在您的配置中命名)的位置中%~
。这会检查路径是否至少有 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
但这不一定是坏事。
相反,%~
您也可以使用%d
(或者您当前PROMPT
可能已经使用%d
)。区别在于,它%d
显示完整的绝对路径,而%~
显示“命名目录”的简写:例如/home/youruser
变得~
和/home/otheruser
成为~otheruser
。如果您喜欢使用完整路径作为缩短的基础,只需将任何出现的 替换~
为d
。
答案2
除了此处给出的其他答案之外,您还可以使用%<
将路径截断为给定数量的人物。我发现这比使用 更好%<n>d
,因为单个路径元素本身可能显然很长。使用%<
会产生更可预测的最大提示长度。
例如,要将使用波形符扩展 ( %~
) 的路径元素向左截断为 15 个字符,并用 替换删除的字符..
,您可以执行以下操作:
PROMPT='%n@%m:%15<..<%~%<<%# '
这记录在 Zsh 手册中迅速扩张,位于页面末尾。
答案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
or %3~
,例如
% mkdir -p ~/a/b/c/d
% cd ~/a/b/c/d
% PS1='%n@%m: %3d%% '
user@computer: b/c/d%
答案4
您可以使用%3d
迅速扩张:
/home/cuonglm/.config/fish/functions $ PS1='%3d $ '
.config/fish/functions $
一般形式为%d
,如果后面有任何正整数d
指定当前路径要显示的尾部组件,零表示显示整个路径,负整数表示要显示的前导路径:
.config/fish/functions $ PS1='%-2d $ '
/home/cuonglm $