Обратите внимание, что вы обсуждаете различные методологии поиска здесь:
Поиск «по пути 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