Обратите внимание, что вы обсуждаете различные методологии поиска здесь:
Поиск по «пути VI» с / или ? будет искать все команды, хранящиеся в истории.
Клавиши со стрелками вверх и вниз требуют чего-то другого: вы хотите, чтобы они перебирали элементы, хранящиеся в истории, которые совпадают (в начале) с тем, что вы уже набрали в командной строке.
Не вдаваясь в подробности, следующее должно быть довольно надежным способом достижения этого:
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