Zshのhistreeditはどこにありますか?

Zshのhistreeditはどこにありますか?

shopt -s histreeditZshで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+ rAlt+ p、履歴からデータを取得するその他のウィジェット。

私は1990年代後半からインタラクティブzshシェルで履歴拡張を体系的に無効にしてきました。私の主な問題の1つは、あなたが見るものがあなたが得るものではないということです。押すと拡張が完了Enterし、命令が同時に実行され、拡張前のコードは履歴に保存されません。

  1. 拡張が失敗する可能性があり、再実行する必要があります。
  2. 目的のイベントの代わりに無効なイベントに展開することができ、単語インジケータを使用すると誤った単語または単語の種類で終わる可能性があります。 。

histreedit1には役立ちますが、2には役立ちません。histverify(1991年のzsh 2.1ベース、2.0(1996)以降のbashでもサポートされています)2は役に立ちますが、1には役に立ちません。

IMO、より良いアプローチは基本的にモードで+と+expand-historyにバインドされたウィジェットを使用し、WYSIWYG方式で明示的に拡張を実行して何が得られるか(失敗時にビープ音が鳴る)、+で元に戻すことができますある項目を確認することです。デフォルトではバインドされていませんが、バインドすることを目的としたウィジェットはスペースを挿入して履歴拡張を実行します。Alt!AltSpaceemacsCtrl_magic-spaceSpace

おすすめ記事