Note que você está discutindo diferentes metodologias de pesquisa aqui:
A pesquisa “the vi way” com / ou ? irá procurar por comandos inteiros armazenados no histórico.
O que você quer que as teclas de seta para cima e para baixo façam é algo diferente: você quer que eles iterem através de itens armazenados no histórico que correspondem (no início) ao que você já digitou na linha de comando.
Sem entrar em muitos detalhes, o seguinte deve ser uma maneira bastante infalível de alcançar isso:
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 -M vicmd '^[[A' history-beginning-search-backward-end \
'^[OA' history-beginning-search-backward-end \
'^[[B' history-beginning-search-forward-end \
'^[OB' history-beginning-search-forward-end
bindkey -M viins '^[[A' history-beginning-search-backward-end \
'^[OA' history-beginning-search-backward-end \
'^[[B' history-beginning-search-forward-end \
'^[OB' history-beginning-search-forward-end