2011-07-08 246 views
2

我正试图编写一个函数,它将打印出$ PWD的最后3个元素,如果有超过3个元素,则预先使用'...'。阵列的最后n个元素

例如

/home/nornagon/src    --> ~/src 
/home/nornagon/src/foo/bar/baz --> ...foo/bar/baz 

这是到目前为止我的代码,但$foo[-3,-1]如果阵列中有太少的元素不起作用。

function custom_pwd() { 
    d=${PWD/#$HOME/\~} 
    d=(${(s:/:)d}) 
    echo $d[-4,-1] 
}
+0

我可能想知道第一个或两个元素。 –

回答

0

这就是我想出了,虽然它不是非常优雅:

function custom_pwd() { 
    local d slash 
    d=${PWD/#$HOME/\~} 
    case $d in 
    /*) slash=/ ;; 
    *) slash= ;; 
    esac 
    d=(${(s:/:)d}) 
    d[1]=$slash$d[1] 
    num=$#d 
    ellipsis= 
    if ((num > 3)); then num=3; ellipsis='…'; fi 
    echo $ellipsis${(j./.)d[-$num,-1]} 
}
2

zsh的已经有可用打印的-P选项一些漂亮的及时处理。这应该做的伎俩:

custom_pwd() { 
    d=$(print -P '%3~') 
    case $d in 
     ('~'*|/*) echo "$d";; 
     (*)  echo "...$d" 
    esac 
} 

见血淋淋的细节man zshmisc,部分“的提示序列的扩张”。

相关问题