2011-07-08 19 views
2

3つ以上の要素がある場合、$ PWDの最後の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

おそらく最初の1つまたは2つの要素も知りたいと思うでしょう。 –

答えて

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、セクション「PROMPT系列のEXPANSION」を参照してください。

関連する問題