如何将此 Bash 完成功能转换为 Zsh 完成功能?

3

如何将此 Bash 完成函数转换为 Zsh 完成函数?

此 Bash 函数允许您使用 Tab 键自动补全当前工作目录上方的目录名称,以便更快、更准确地在文件层次结构中导航。

例如:

$ pwd
/Users/me/Animals/Mammals/Ungulates/Goats/Ibex
$ upto Animals
$ pwd
/Users/me/Animals

代码:

function upto {
    if [[ -z $1 ]]; then
        return
    fi
    local upto=$1
    cd "${PWD/\/$upto\/*//$upto}"
}

_upto()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local d=${PWD//\//\ }
    COMPREPLY=( $( compgen -W "$d" -- "$cur" ) )
}
complete -F _upto upto

我希望在zsh中有一个类似的,但我并不完全理解它是如何工作的,更不用说如何修改它以适应zsh了。
1个回答

2
尝试使用这个自动完成功能。
_upto() {
    local parents;
    parents=(${(s:/:)PWD});
    compadd -V 'Parent Dirs' -- "${(Oa)parents[@]}";
 }

使用compdef _upto upto命令启用它。

通过创建一个深度嵌套的文件夹进行测试:f=/tmp/foo/bar/one/two/three;mkdir -p $f;cd $f。输入upto <Tab>应该会出现

three  two    one    bar    foo    tmp

为了反转目录(即从根目录开始而不是从..开始提出建议),请从compadd行中删除(Oa)标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接