zsh History-beginning-search-backwards は、必要に応じてカーソルを配置しません。

zsh History-beginning-search-backwards は、必要に応じてカーソルを配置しません。

Bashでは以下を使用しました。

% cat .inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward

.zshでも同じ動作をしたいので、次のキーバインドを試しました。

"^[[A" history-beginning-search-backward
"^[[B" history-beginning-search-forward

直前のコマンドを見るために(テキストを入力せずに)上に矢印を撃ったとき、カーソルが行の終わりではなく先頭にあることを除いて、これは私が望むものとほぼ同じです。

'bindkey'^[[A'history-search-backward' は閉じてカーソルを最後に置きますが、最初の単語だけを検索します。たとえば、「ssh foo」と入力すると、The から最新の「ssh」が返されます。 「ssh foo」で始まらない履歴の最新行です。また、検索時にカーソルが行の末尾にありますが、これは私が望むものとは異なります(history-search-backwardsbashとzshの両方がhistory-beginning-search-backward入力を中断した位置にカーソルを保持します)。

同じ機能でカーソルを行の末尾に配置できますかhistory-beginning-search-backward

答え1

キーにバインドすると、複数Up行コマンドを編集するときにカーソルを上に移動できなくなります。

これは、基本ウィジェットがコマンドの2行目または複数行以下にある場合はカーソルを上に移動し、そうでない場合は履歴から前のコマンドを呼び出すことですUpup-line-or-history

以前のコマンドが履歴に表示されたときにカーソルの左側と同じ先行部分文字列を持つコマンドが表示されるように変更するには、自動ロード可能なウィジェットがあります。

for direction (up down) {
  autoload $direction-line-or-beginning-search
  zle -N $direction-line-or-beginning-search
  key=$terminfo[kcu$direction[1]1]
  for key ($key ${key/O/[})
    bindkey $key $direction-line-or-beginning-search
}

Up(terminfoは、またはを押したときに送信されたシーケンスを取得するためにここで照会され、ほとんどの端末でサポートされている両方のキーボード転送モードを含めるためのバリアントにバインドされ、Down置き換えられます。)O[

または、up/down-line-or-history次のウィジェットを使用するようにウィジェットをオーバーライドすることもできます。

for direction (up down) {
  autoload $direction-line-or-beginning-search
  zle -N $direction-line-or-{history,beginning-search}
}

Upこれは/だけでなく、DownパターンのCtrl+ P/を含むこれらのウィジェットを使用するすべてのキーマップに影響します。Nemacs

答え2

zshでは、キーをシェル機能にバインドできます。シェル関数は次のように登録する必要があります。小さな部品そしてzle -N。バッファ、クリップボードなどの内容を含む複数の変数にアクセスできます。渡すことができるzle組み込み

history-beginning-search-backwardこのコード(テストされていない)は、バッファが最初に空の場合にのみ、カーソルを次の行の末尾に配置します。これがまさにあなたが望むものであるかどうかはわかりませんが、そうでなければ適応しやすいでしょう。

function history-beginning-search-backward-end-of-line {
  local original_buffer_length=$#BUFFER
  zle history-beginning-search-backward
  if ((original_buffer_length == 0)); then
    CURSOR=$#BUFFER
  fi
}
zle -N history-beginning-search-backward-end-of-line
bindkey "^[[A" history-beginning-search-backward-end-of-line

関連情報