我有以下目录结构:
/home/tichy/xxx/yyy/aaa
/home/tichy/xxx/yyy/aab
/home/tichy/xxx/yyy/aac
我想输入cdw y<TAB>并得到cdw yyy/<CURSOR>结果,所以我可以添加cdw yyy/a<TAB>并得到cdw yyy/aa<CURSOR>
我想出的解决方案给了我以下内容:
cdw y<TAB> => cdw yyy<SPACE><CURSOR>
以下代码我到目前为止:
_cdw () {
local cur prev dirs
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
COMPREPLY=($(compgen -d -- /home/tichy/xxx/${cur}|perl -pe 's{^/home/tichy/xxx/}{}'))
# no difference, a bit more logical:
dirs=$(compgen -o nospace -d /home/tichy/xxx/${cur}|perl -pe 's/{^/home/tichy/xxx/}{}')
COMPREPLY=($(compgen -d -W ${dir} ${cur}|perl -pe 's{^/home/tichy/xxx/}{}'))
return 0
}
complete -F _cdw cdw
cdw () {
cd /home/tichy/xxx/$@
}
有什么想法有什么问题吗?在我看来,完成过程似乎已经完成,并且不再期待任何输入。