
現在私の.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