我正在尝试编写一个函数,打印出$ PWD的最后3个元素,如果有超过3个元素,请事先用'...'。
e.g。
/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 :(得分:2)
zsh已经通过print的-P选项提供了一些漂亮的提示处理。这应该可以解决问题:
custom_pwd() {
d=$(print -P '%3~')
case $d in
('~'*|/*) echo "$d";;
(*) echo "...$d"
esac
}
有关血腥的详细信息,请参阅man zshmisc
,“扩展提示序列”部分。
答案 1 :(得分: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]}
}