因此,默认情况下,当我第一次使用 Zsh 时,快捷方式(例如!!
(对于上一个命令)、!$
(对于上一个命令的最后一个参数)、!v
(对于以 开头的最后一个命令v
)等等)的工作方式就像在 Bash 中一样,即我可以做:
rm -rf /
sudo !!
(除了在最后一个字符后按回车键之外,这两行末尾没有尾随空格)
例如。不过,我有一个带有 oh-my-zsh 的 zshrc 和 OMZ 附带的几个插件,以及使用 powerline10k 主题,每当我将配置复制到新机器时,复制过来后,它现在可以在您的位置工作需要按 Enter 或空格键才能“展开”快捷方式,例如,对于上面的示例,同样没有尾随空格,只需在行尾按 Enter 键,它将变成三个命令:
rm -rf /
sudo !!
sudo rm -rf /
然后,您必须在第三行再次按 Enter 键才能实际执行该命令。
或者只需两行,您就可以输入:
rm -rf /
sudo !!
(没有尾随空格)
然后当你输入:
rm -rf /
sudo !!<SPACE>
(<SPACE>
不是字面意思,是行尾空格字符的表示)
它会自动扩展为:
rm -rf /
sudo rm -rf /<SPACE><your cursor is here>
我认为这是一项安全功能,因此您可以在按回车键之前查看快捷方式扩展的内容,但说实话,当发生这种情况时,我只是本能地双击回车键,所以它并没有真正为我增加额外的安全性。
我的问题是:有谁知道 zshrc (或其他地方)中的哪些设置会导致这种行为,以及如何禁用它,以便我可以按照默认开箱即用的 Zsh 中的工作方式使用这些快捷方式?
(我尝试查找此内容,但是我不知道这些快捷方式的名称,并且像zsh enable !! shortcut
zsh enable "!!" shortcut
等查找内容不会给您提供有用的结果)
答案1
对于空间,这是由于空间绑定到magic-space
小部件而引起的:
% bindkey -L ' '
bindkey " " magic-space
self-insert
要禁用它,请使用以下命令恢复绑定:
bindkey " " self-insert
在输入的情况下,您看到的行为是通过 HIST_VERIFY 选项启用的。禁用它可以是:
unsetopt hist_verify
在这两种情况下,它们都会恢复 zsh 默认值。因此,您要么需要在 oh-my-zsh 和您的插件初始化后将它们放在 的末尾~/.zshrc
,要么找到它们首次设置的位置,看看是否可以阻止插件更改这些设置。