現在、私の.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
これは 文書化された動作 です。
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
等。
これ 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]
代わりに。
zsh-history-substring-search プロジェクトもご覧ください。
それはあなたが探しているものを提供し、それはoh-my-zshプラグインとしても使用できます。