
shopt -s histreedit
ZshでBashに対応するものは何ですか?
参考としてのみバッシュリファレンスマニュアル:
histreedit
setとReadlineを使用している場合、ユーザーは失敗した履歴の置き換えを再編集する機会が与えられます。
答え1
AFAIK、zshには対応する機能は組み込まれていません。 (in)などの操作を実行しておおよその計算を実行できます~/.zshrc
。
accept-line() {
pre_HISTCMD=$HISTCMD pre_BUFFER=$BUFFER pre_CURSOR=$CURSOR
zle .$WIDGET
}
zle-line-init() {
if (( $? == 1 && HISTCMD == pre_HISTCMD )) && [[ -z $BUFFER ]]; then
BUFFER=$pre_BUFFER CURSOR=$pre_CURSOR
fi
}
zle -N zle-line-init
zle -N accept-line
$?
失敗した履歴拡張が設定されており、履歴項目を追加しないことを処理します1
(拡張が履歴行に追加されていない限り、このトリックは多くの特殊なケースでは機能しない可能性があります)。
IMOでは、記録拡張(70年代後半にcshによって導入されました)が80年代に位置していましたが、ターミナルが遅く、行の編集が非常に基本的だったとき、私はレコードベースの完成などのレコード抽出ウィジェットを使用することを好みます。Ctrl+ r、Alt+ p、履歴からデータを取得するその他のウィジェット。
私は1990年代後半からインタラクティブzshシェルで履歴拡張を体系的に無効にしてきました。私の主な問題の1つは、あなたが見るものがあなたが得るものではないということです。押すと拡張が完了Enterし、命令が同時に実行され、拡張前のコードは履歴に保存されません。
- 拡張が失敗する可能性があり、再実行する必要があります。
- 目的のイベントの代わりに無効なイベントに展開することができ、単語インジケータを使用すると誤った単語または単語の種類で終わる可能性があります。 。
histreedit
1には役立ちますが、2には役立ちません。histverify
(1991年のzsh 2.1ベース、2.0(1996)以降のbashでもサポートされています)2は役に立ちますが、1には役に立ちません。
IMO、より良いアプローチは基本的にモードで+と+expand-history
にバインドされたウィジェットを使用し、WYSIWYG方式で明示的に拡張を実行して何が得られるか(失敗時にビープ音が鳴る)、+で元に戻すことができますある項目を確認することです。デフォルトではバインドされていませんが、バインドすることを目的としたウィジェットはスペースを挿入して履歴拡張を実行します。Alt!AltSpaceemacs
Ctrl_magic-space
Space