Este é o comportamento documentado :
down-line-or-search
Move down a line in the buffer, or if already at the bottom line, search forward in the history for a line beginning with the first word in the buffer.
Não parece haver um widget existente que faça exatamente o que você quer, então você terá que fazer o seu próprio. Veja como definir um widget que se comporta como up-line-or-search
, mas usando o início da linha (até o cursor) em vez da primeira palavra como string de pesquisa. Realmente não foi testado, especialmente em entradas de várias linhas.
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
Uma abordagem alternativa é usar history-beginning-search-backward
, mas apenas chamá-lo se o cursor estiver na primeira linha. Não testado.
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