Encontrei a solução para o meu problema na documentação do ZSH . Oh-my-zsh parece mapear as chaves ↑ e ↓ para algo como
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward
Que produz o comportamento exato que descrevi acima. A documentação do ZSH descreve o comportamento de history-search-backward as
Search backward in the history for a line beginning with the first word in the buffer.
O que eu queria, em vez disso, era o mapeamento a seguir, que inseri no meu ~/.zshrc :
bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward
O comportamento de history-beginning-search-backward é o seguinte:
Search forward in the history for a line beginning with the current line up to the cursor. This leaves the cursor in its original position.
Além disso, se \e[A não funcionar para as setas para cima ou para baixo, pressione <ctrl-v><KEY (e.g., up arrow)> em outro terminal que forneça ^[OA . Então você pode usar isso em vez de \e[A . O processo é descrito aqui: link