web-dev-qa-db-ja.com

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

23
rps

これは 文書化された動作 です。

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

まさにあなたが望んでいることをする既存のウィジェットがないように思われるので、あなたはあなた自身のものを作らなければならないでしょう。以下は、up-line-or-searchのように動作するウィジェットを定義する方法ですが、検索文字列として最初のWordではなく、行の先頭(カーソルまで)を使用します。特に複数行の入力ではなく、実際にはテストされていません。

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

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
ctrl+vDOWN
ctrl+vPageUp
ctrl+vPageDown
等。

37
mudrii

これ 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]代わりに。

9
joeytwiddle

zsh-history-substring-search プロジェクトもご覧ください。

それはあなたが探しているものを提供し、それはoh-my-zshプラグインとしても使用できます。

1
Matthieu Napoli