在zsh提示符下折叠目录

时间:2015-06-21 09:11:23

标签: regex perl zsh

我使用以下函数生成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个目录?

1 个答案:

答案 0 :(得分:2)

你可以使用它,

s|^$HOME|~|g; s|/([^/])[^/]*(?=/[^/]*/[^/]*/)|/\$1|g

它检查匹配必须后跟至少三个正斜杠。

DEMO