(见我的上一个问题以获取更多背景信息)。
我正在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