问题:
有时,当我尝试在 zsh 中执行操作时,它不会完成我想要的文件名,因为它们不适用于当前上下文。两个例子:
- 我想强制添加一个当前在 hg 或 git 中被忽略的文件。oh-my-zsh 试图通过仅完成未忽略的文件来帮助我,但在这种情况下,这是一个障碍。我被迫手动输入文件的完整路径。
- 我想用来
git diff
区分我硬盘上的两个任意文件。这些文件不驻留在任何存储库中,但谁在乎呢?!git diff --no-index
是区分任何两个文件的一种非常好的方法。但是因为它们不在仓库中,所以 zsh 不会完成它们。
建议的解决方案:
我可以简单地编辑源代码控制上下文以完成所有文件名,而不管它们的源代码控制状态如何。但是有几个限制:
- 我不知道该怎么做。
- 拥有一个“逃生舱”可能会很好,无论上下文如何,我都可以强制文件完成。
所以,我决定改为绑定一个快捷键来强制正常的、无上下文的文件完成。
到目前为止我所拥有的:
Zsh 显然有一种简单的方法可以做到这一点,如本问题所述。所以我在我的中添加了以下几行.zshrc
:
zle -C complete complete-word complete-files
bindkey '^[[Z' complete
complete-files () { compadd - $PREFIX* }
这会导致shift-tab启动文件完成。它在标准 zsh 中运行良好!但是嘘,由于某种原因,当我获取 oh-my-zsh 时它不起作用。:-(
那么有没有办法让它与 oh-my-zsh 一起工作,或者有没有我可能会觉得令人满意的替代解决方案?