【发布时间】:2015-06-21 09:11:22
【问题描述】:
我正在使用以下函数来生成我的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 个目录?
【问题讨论】: