什么 ZSH 命令允许您使用 !!、!$ 等快捷方式,而无需先按空格/回车键?

什么 ZSH 命令允许您使用 !!、!$ 等快捷方式,而无需先按空格/回车键?

因此,默认情况下,当我第一次使用 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,要么找到它们首次设置的位置,看看是否可以阻止插件更改这些设置。

相关内容