Zsh Z自动完成cp目标目录

Zsh Z自动完成cp目标目录,zsh,oh-my-zsh,cp,Zsh,Oh My Zsh,Cp,我已经有一段时间没有使用zsh的z命令了:它基于频率的特性非常有用!我现在正在寻找类似的自动完成,以便在使用cp时完成目标: 预期:行为: $: ls -> foo.txt bar.txt $: cp + TAB -> suggests iteratively foo.txt and bar.txt $: cp foo.txt rece + TAB -> suggest /home/user/Documents/recent_directory 有什么办法吗?谢谢你的帮助 是

我已经有一段时间没有使用zsh的
z
命令了:它基于频率的特性非常有用!我现在正在寻找类似的自动完成,以便在使用
cp
时完成目标:

预期:行为:

$: ls
-> foo.txt bar.txt
$: cp + TAB
-> suggests iteratively foo.txt and bar.txt
$: cp foo.txt rece + TAB
-> suggest /home/user/Documents/recent_directory

有什么办法吗?谢谢你的帮助

是的,有:只需安装即可


(免责声明:我是
zsh autocomplete
的维护者)

另一种方法是使用
动态命名目录

假设您有一个函数
ffzget
,它使用
fzf
选择最近的目录。然后你可以:

function zsh_directory_name_1() {
    local type="$1" arg="$2"
    if [[ "$type" == n ]] ; then
        # Dynamic named directories
        # e.g., `ll ~[dl]`

        o="$(ffz-get "$arg")"
        typeset -ga reply
        reply=("$o")
        return 0
    elif [[ "$type" == c ]]; then
        return
    elif [[ "$type" == d ]]; then
        return 1
    else
        echo "$0: Unknown type '$type'"
        return 1
    fi
    return 1
}

typeset -ag zsh_directory_name_functions=()
zsh_directory_name_functions+='zsh_directory_name_1'
您可以在中看到我自己的
ffzget
实现,但是您需要对它进行调整,以便在不使用我所有的dot文件的情况下使用它

这整件事让你可以这样做你的例子:

cp foo.txt ~[rece
# typing the closing ']' will open `fzf` so that you select the candidate you want
cp foo.txt ~[rece]/bar.txt
请注意,我自己的
ffzget
缓存每个查询的用户选择(在
redis
中),我不确定这是否必要