したがって、デフォルトでは、Zshを初めて使用するときのショートカット(例:(!!
前のコマンドの場合)、!$
(前のコマンドの最後の引数の場合)、!v
(で始まる最後のコマンドの場合v
)など)は、Bashと同じように機能します。つまり、次のことができます。
rm -rf /
sudo !!
(最後の文字の後にEnterキーを押すことを除いて、この2行の末尾に末尾のスペースはありません。)
例えば。ただし、ohm-my-zshとOMZに付属の2つのプラグインを含むzshrcがあり、powerline10kテーマを使用しており、構成を新しいシステムにコピーするたびにコピーした後、次のように動作します。位置ショートカットを「拡張」するには、Enterまたはスペースバーを押す必要があります。たとえば、上記の例では、末尾の空白なしで行末でEnterキーを押すと、3つのコマンドになります。
rm -rf /
sudo !!
sudo rm -rf /
その後、実際にコマンドを実行するには、3行目でもう一度Enterキーを押す必要があります。
または、2行で次のように入力することもできます。
rm -rf /
sudo !!
(末尾の空白なし)
次に、次のように入力します。
rm -rf /
sudo !!<SPACE>
(<SPACE>
文字通りではありませんが、行末の空白文字を表現したものです)
次のように自動的に展開されます。
rm -rf /
sudo rm -rf /<SPACE><your cursor is here>
Enterキーを押す前にショートカットが拡張されていることがわかるように、これが安全機能であることがわかりました。
私の質問は: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
、最初に設定された場所を見つけて、プラグインがその設定を変更するのを防ぐことができるかどうかを確認する必要があります。