【发布时间】:2014-10-02 08:09:47
【问题描述】:
问题:
有时,当我尝试在 zsh 中执行操作时,它不会完成我想要的文件名,因为它们不适用于当前上下文。两个例子:
- 我想强制添加一个当前在 hg 或 git 中被忽略的文件。 oh-my-zsh 试图通过仅完成未忽略的文件来帮助我,但在这种情况下这是一个障碍。我不得不手动输入文件的完整路径。
- 我想使用
git diff来区分我硬盘上的两个任意文件。这些文件不驻留在任何存储库中,但谁在乎呢?!git diff --no-index是区分任何两个文件的好方法。但因为它们不在 repo 中,zsh 不会完成它们。
建议的解决方案:
我可以简单地编辑源代码控制上下文以完成所有文件名,无论它们的源代码控制状态如何。但是有几个限制:
- 我不知道该怎么做。
- 有一个“逃生舱”可能会很好,我可以强制完成文件,无论上下文如何。
所以,我决定改为绑定一个快捷键来强制正常的、无上下文的文件完成。
我目前所拥有的:
Zsh 显然有一个简单的方法来做到这一点,如this question 中所述。所以我在.zshrc 中添加了以下几行:
zle -C complete complete-word complete-files
bindkey '^[[Z' complete
complete-files () { compadd - $PREFIX* }
这会导致 shift-tab 启动文件完成。它在标准 zsh 中运行良好!但是嘘,由于某种原因,当我获取 oh-my-zsh 时它不起作用。 :-(
那么有没有办法让它与 oh-my-zsh 一起工作,或者有没有我可能会觉得满意的替代解决方案?
【问题讨论】:
-
在某些时候 oh-my-zsh 可能会删除以前的绑定。您可以使用
bindkey | grep '^[[Z'检查绑定是否仍然存在于正在运行的shell 中。你也可以用zle -lL complete检查zle设置是否正确,用whence -c complete-files检查函数定义是否正确。 -
你完全正确!只要我 在 采购
oh-my-zsh.sh之后致电bindkey,一切都很好。 (oh-my-zsh 将其绑定到reverse-menu-complete)如果您想添加答案,我会将其标记为正确。
标签: autocomplete zsh oh-my-zsh zsh-completion