mirror of
https://github.com/rydesun/dotfiles.git
synced 2025-12-26 14:44:58 +08:00
Update zsh functions
This commit is contained in:
parent
a70cd361b7
commit
821b8608df
1 changed files with 21 additions and 35 deletions
|
|
@ -1,42 +1,28 @@
|
|||
# https://zhuanlan.zhihu.com/p/51008087
|
||||
() {
|
||||
local pwd="$1"
|
||||
# fix end slash
|
||||
local home="${HOME%/}"
|
||||
local size=${#home}
|
||||
[[ $# == 0 ]] && pwd="$PWD"
|
||||
# fix end slash
|
||||
pwd=${pwd%/}
|
||||
[[ $# == 0 ]] && local pwd="$PWD" || local pwd=$1
|
||||
[[ -z "$pwd" || "$pwd" == "/" ]] && echo $pwd && return
|
||||
|
||||
[[ -z "$pwd" ]] && return
|
||||
if [[ "$pwd" == "/" ]]; then
|
||||
echo "/"
|
||||
return
|
||||
elif [[ "$pwd" == "$home" ]]; then
|
||||
echo "~"
|
||||
return
|
||||
fi
|
||||
[[ "$pwd" == "$home/"* ]] && pwd="~${pwd:$size}"
|
||||
if [[ -n "$BASH_VERSION" ]]; then
|
||||
local IFS="/"
|
||||
local elements=($pwd)
|
||||
local length=${#elements[@]}
|
||||
for ((i=0;i<length-1;i++)); do
|
||||
local elem=${elements[$i]}
|
||||
if [[ ${#elem} -gt 1 ]]; then
|
||||
pwd="${pwd%/}"
|
||||
local home="${HOME%/}"
|
||||
[[ "$pwd" == "$home" ]] && echo "~" && return
|
||||
|
||||
local offset=${#home}
|
||||
[[ "$pwd" == "$home/"* ]] && pwd="~${pwd:$offset}"
|
||||
|
||||
local elements=("${(s:/:)pwd}")
|
||||
local length=${#elements}
|
||||
for i in {1..$((length-1))}; do
|
||||
local elem=${elements[$i]}
|
||||
if [[ ${#elem} > 1 ]]; then
|
||||
local c=${elem:0:1}
|
||||
if [[ $c == '.' ]]; then
|
||||
elements[$i]=${elem:0:2}
|
||||
else
|
||||
elements[$i]=${elem:0:1}
|
||||
fi
|
||||
done
|
||||
else
|
||||
local elements=("${(s:/:)pwd}")
|
||||
local length=${#elements}
|
||||
for i in {1..$((length-1))}; do
|
||||
local elem=${elements[$i]}
|
||||
if [[ ${#elem} > 1 ]]; then
|
||||
elements[$i]=${elem[1]}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
local IFS="/"
|
||||
echo "${elements[*]}"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue