在fish tab-completion中列出不同位置的目录

问题描述

我想创建一个作为目录快捷方式的fish函数

函数如下所示:

function mydir -d "Navigate to mydir and its subdirectories from anywhere"
    cd $HOME/some/path/mydir/$argv
end

功能运行良好,但我想添加制表符补全。我目前有这个用于制表符完成:

complete --no-files --exclusive --command mydir --arguments "(__fish_complete_directories)"

问题在于,这将制表完成到当前工作目录中的目录。 相反,我希望它对 $HOME/some/path/mydir/ 中的目录进行制表符补全。我在文档中找不到可以帮助我完成此操作的示例或标志。

我不太了解鱼,但我认为一种方法是手动遍历这些目录并将它们添加为选项,但感觉不对,无论如何我都在为该实现而苦苦挣扎。

解决方法

老实说,您的“遍历这些目录”对我来说似乎是最“像鱼一样”的方式,但鉴于有人已经经历了创建和调试现有 __fish_complete_directories ({{3 }}),我想我只是将它用作您自己的完成功能的起点。

在我看来,您可以在“不存在的命令黑客”之前添加 pushd $HOME/some/path/mydir,然后在末尾添加 popd