我正在尝试建立一个zsh函数,它将带我回到顶层git目录,并带有一个可选参数来相对于该目录移动。我目前有这个可行的:
alias gitdir='git rev-parse --show-toplevel'
cdgit() { cd $(gitdir)/$1 }
问题是,制表符补全无法正常工作,它将在运行时从我所在的任何目录自动完成cdgit,但我希望从中完成$(gitdir)。如果我在运行之前输入以下行cdgit,则补全将正常运行(从$(gitdir)):
compctl -W $(gitdir) -/ cdgit
但是,我不想每次键入cdgit仅获得制表符完成之前都键入该命令。有什么办法可以使我完成功能cdgit,以某种方式运行该命令,使我的完成正确吗?
为什么要下票?
—
Josh Sherick
您为什么不想坚持使用
—
mpy
compctl解决方案?这可以转到您在其中定义cdgit函数的rc文件,对吗?
不,因为我不希望外壳启动时运行它。那将把
—
Josh Sherick
cdgit <path>完成的目录更改$(gitdir)为运行我的.zshrc时评估的目录。但是,我希望它能够自动完成,直到$(gitdir)我输入时得到的任何结果cdgit <path>。因此,我想输入cdgit并按Tab键,然后从需要的位置获取完成信息cd,该位置可能与启动Shell时的位置不同。
我猜它可能会在每次目录更改时运行。这不是最干净的解决方案,但这是一个快速的命令。
—
Josh Sherick
当然,我不好的
—
mpy
$(gitdir)是那时没有意识到那将是静态的。看到我的答案的建议。