我正在尝试建立一个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)
是那时没有意识到那将是静态的。看到我的答案的建议。