在 zsh 提示符下缩短路径

在 zsh 提示符下缩短路径

BashPROMPT_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,您可以使用%3dor %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 $

相关内容