因此,我编写了一个类似于普通cd
的函数,并且可以导航回到当前$PWD
中的任何目录。
function ccd() {
local next_dir=$1
cd $next_dir >/dev/null 2>&1
if [[ $? != 0 ]]; then
if [[ ${next_dir: -1} == '/' ]]; then ## delete trailing "/" if present
next_dir=${next_dir: : -1}
fi
if [[ $PWD == *$next_dir* ]]; then
local pwd_part=$(pwd | nawk -F "/$next_dir/" '{print $1}')
cd $pwd_part'/'$next_dir
else
echo "ccd: no such file or directory: $next_dir"
fi
fi
}
所以现在我可以用ccd foo/qux/bar/baz/
而不是
ccd qux
cd ../..
写到CD,然后再写回qux。
我现在想要实现的是,在上面的示例中,启用了自动完成功能(基于当前的$PWD
),即ccd q<TAB>
应该扩展为ccd qux
。
在ZSH中这可能吗?我的直觉说应该有可能,但我不知道如何。