问题:
有时,当我尝试在zsh中执行操作时,它将无法完成我想要的文件名,因为它们不适用于当前上下文。两个例子:
git diff
来区分硬盘上的两个任意文件。这些文件不在任何存储库中,但谁在乎呢?! git diff --no-index
是一种非常好的方法来区分任何两个文件。但由于它们不在回购中,因此zsh无法完成它们。建议的解决方案:
我可以简单地编辑源控件上下文以完成所有文件名,无论其源控件状态如何。但是有一些限制:
所以,我决定绑定一个关键快捷方式来强制正常,无上下文的文件完成。
到目前为止我有什么:
Zsh显然有一种简单的方法可以做到这一点,详见this question。所以我在.zshrc
添加了以下几行:
zle -C complete complete-word complete-files
bindkey '^[[Z' complete
complete-files () { compadd - $PREFIX* }
这会导致 shift-tab 启动文件完成。它在标准zsh中工作得很漂亮!但是boo-hoo,由于某种原因,当我采购oh-my-zsh时它不起作用。 : - (
那么有没有办法让这个与哦-my-zsh一起使用,或者是否有一个我可能觉得令人满意的替代解决方案?
答案 0 :(得分:1)
我这样做的方式(用diff
替换默认的git
命令)非常简单。
将此添加到您的~/.zshrc
:
diff() {
git diff --no-index "$@"
}
在我使用别名之前,但是因为zsh可以解决"然后,他们使用git diff
中的自动完成功能,这无意中导致了与您相同的问题。
使用函数可以解决此问题,因为zsh仅恢复为经典"文件"完成。