我使用以下函数生成zsh prompt
:
_sudar_collapsed_wd() {
echo $(pwd | perl -pe "
BEGIN {
binmode STDIN, ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
}; s|^$HOME|~|g; s|/([^/])[^/]*(?=/)|/\$1|g
")
}
基本上,通过折叠除当前目录之外的所有父目录,这会将/Users/sudar/dir1/dir2/dir3/dir4
之类的路径转换为~/D/c/d/d/d/dir4
。
但我不想折叠路径中的最后3个目录。因此/Users/sudar/dir1/dir2/dir3/dir4
变为~/D/c/d/dir2/dir3/dir4
实际替换发生在这个正则表达式中:s|/([^/])[^/]*(?=/)|/\$1|g
。
如何更改此正则表达式,以便它不会替换路径中的最后3个目录?
答案 0 :(得分:2)