ZSH:主な検索履歴を上下に?

ZSH:主な検索履歴を上下に?

現在私の.zshrcには次のものがあります。

bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search

ただし、これは空白文字が表示されるまで、現在の入力と一致するようです。たとえば、sudo ls /私の履歴から始まるすべての行に一致しますsudoが、私は入力全体に一致する行だけを一致させたいと思います。 (つまりsudo ls /etc、一致するが一致しないsudo cat /var/log/messages

必要な動作を得るために何を変更する必要がありますか?

関連がある場合、全体の.zshrcは次のようになります。https://gist.github.com/919566

答え1

zsh は以下を使用してこの機能を提供します。

history-beginning-search-backward
history-beginning-search-forward

前任者。

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


ctrl+で正しいキーコードを見つけてください。vKEY

前任者。
ctrl+++++などvUP
ctrlvDOWN
ctrl​ ​vPageUp
ctrlvPageDown

Mac をお使いの場合、OSX Catalina には次の事項が適用されます。

 bindkey "\e[5~" history-search-backward
 bindkey "\e[6~" history-search-forward

答え2

これ2013年のブログ投稿カーソルの前のすべての単語に一致するいくつかのキーバインディングが推奨されます。

# Cycle through history based on characters already typed on the line
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "$key[Up]" up-line-or-beginning-search
bindkey "$key[Down]" down-line-or-beginning-search

$key[Up]お使いのコンピュータで動作しない場合は、代わりに$key[Down]試してみてください。$terminfo[kcuu1]$terminfo[kcud1]

答え3

これは記録された行動:

down-line-or-search
バッファから1行下に移動します。すでに一番下の行にある場合は、バッファ内の最初の単語で始まる行を履歴から前方に検索します。

必要なものを正確に実行する既存のウィジェットがないようで、自分で作成する必要があります。同様に動作しますup-line-or-searchが、最初の単語の代わりに行の先頭(カーソルまで)を検索文字列として使用するウィジェットを定義する方法は次のとおりです。特に、複数行の入力については実際にテストしていません。

up-line-or-search-prefix () {
  local CURSOR_before_search=$CURSOR
  zle up-line-or-search "$LBUFFER"
  CURSOR=$CURSOR_before_search
}
zle -N up-line-or-search-prefix

別の方法は、history-beginning-search-backwardカーソルが最初の行にあるときにのみ呼び出すことです。検証されていません。

up-line-or-history-beginning-search () {
  if [[ -n $PREBUFFER ]]; then
    zle up-line-or-history
  else
    zle history-beginning-search-backward
  fi
}
zle -N up-line-or-history-beginning-search

答え4

私の質問に対する答えを見つけましたここ、私の考えには完璧です。

たとえば、これらの機能を「Page Up」キーと「Page Down」キーにバインドし、「Page Up」を押すと、入力を開始したもの(最初の単語だけでなく)を使用して履歴を検索します。

つまり、入力するとsudo ls /etc表示さsudo lsれますsudo ls /etcが表示されませんsudo cat...

以下は私のzshrcから抜粋したものです。

## Page UP and Page Down through History
autoload -Uz history-search-end

zle -N history-beginning-search-backward-end \
                history-search-end
zle -N history-beginning-search-forward-end \
                history-search-end
bindkey "\e[5~" history-beginning-search-backward-end
bindkey "\e[6~" history-beginning-search-forward-end

関連情報