zsh 自动完成事件指示器

zsh 自动完成事件指示器

(见我的上一个问题以获取更多背景信息)。

我正在zsh从迁移到bash,并使用oh-my-zsh。当我的zsh历史记录如下所示时:


git status
git add -A
git commit

我希望能够重新运行git add -A。为此,我可以使用!?git add,它应该:

!?str[?]引用包含 str 的最新命令。如果此引用后面要跟修饰符或任何不被视为 str 一部分的文本,则后面必须有“?”。

zsh 事件指示器的链接是这里

不幸的是,我无法做到这一点 - 当我输入 时!?git add,当我按下 时' ',它会自动将命令补全为最近匹配的命令git(即,它会自动补全为git commit)。由于这个自动补全,当我按下空格时,我无法正确使用事件指示符。

我猜这是一个oh-my-zsh功能。不过我不知道该去哪里找——grep在源代码中输入“complet”oh-my-zsh没有任何结果。

我的问题是:如何关闭此功能?或者,如果这不是已知的功能,我应该在哪里查找 - 如果我要在输入空格时实现此自动完成功能,那么在框架中哪里是合理的oh-my-zsh

答案1

查看 oh-my-zsh/lib/key-bindings.zsh,你会看到这一行

bindkey ' ' magic-space    # also do history expansion on space

将其注释掉以删除此功能。

答案2

还有其他几种方法可以解决这一问题:

!{?git add?}

左括号将抑制第一个空格上的 magic-space 扩展,然后如果您在右括号后使用 tab,它将在同一行上扩展,就像 magic 一样。当然!{?git a?}就足够了。

!?add

git至少在这种情况下,您根本不需要。一秒钟后d,您可以按回车键或 Tab 键。如果您和命令之间有很多历史记录,这会add在命令中的任何位置找到这三个字符,因此这可能是一个问题。

zsh 历史扩展详细说明在以下文档中:

http://zsh.sourceforge.net/Doc/Release/Expansion.html#History-Expansion

相关内容