Я заметил, что если я нажимаю стрелку вверх в приглашении, то я получаю предыдущую команду, и снова снова получаю команду перед этим.
Тогда как, если я нажимаю стрелку вверх перед предыдущейпрограмма завершила , затем вместо этого отображается предыдущая команда, курсор находится в конце строки, но oh-my-zsh теперь находится в режиме «поиск строк, начинающихся с ...», что означает, что я могу 'нажмите вверх, чтобы получить предыдущую команду.
Я уверен, что это поведение хорошо известно и ожидаемо, но на случай, если вы его не получите, вы можете повторить его так:
- Введите
ls
return - Введите
sleep 3
return - подождите 3 секунды, пока не появится приглашение
- нажмите ⬆ (должно отобразиться
sleep 3
) - снова нажать ⬆ (должно отобразиться
ls
) - нажать вернуть (для запуска
ls
) - Тип
sleep 3
возврат ⬆ (нажмите стрелку вверх до истечения 3 секунд) - Это штеперь может показывать
sleep 3
- Нажмите ⬆
, он все равно будет показывать sleep 3
, но он хочет, чтобы он показывал ls
.Вместо этого он находится в «поиске команд, которые начинаются с режима sleep 3
вместо просто go to previous command
режима.
Чтобы попытаться очистить в обоих случаях, это шаги
- ls возврат
- сон 3 возврат
- ⬆
- ⬆
Но в итоге они дают разные результаты в зависимости от того, происходит ли шаг 3 до или после завершения шага 2.
Примечание. Я видел эти вопросы и ответы: https://unix.stackexchange.com/questions/324623/how-to-make-oh-my-zsh-history-behavior-similar-to-bashs
Но, похоже, это не то, что я ищу. Мне нравится частичная строка oh-my-zsh + up = поиск строк, начинающихся с частичной. Что я пытаюсь исправить, так это то, что если я нажимаю нашаг 2 над ним волшебным образом вставляет частичное, а если я подожду, пока шаг 2 не завершит его, то этого не произойдет.
Как мне добиться, чтобы oh-my-zsh был здесь согласованным, так что преждевременная стрелка вверх ведет себя так жекак обычная стрелка вверх?
Я удивлен, что этот вопрос не является обычным. Это серьезно бесит, когда терминальный акт не соответствуетently.Я бы исключил большинство разработчиков, использующих oh-my-zsh, чтобы постоянно сталкиваться с этой проблемой и быть сильно расстроенным.
Приведенный выше пример с sleep 3
предназначен только для упрощения выявления проблемы.При реальном использовании проблема часто возникает даже с недолговечными командами.Я пишу git status
return git commit somefile -m "short comment"
return ⬆ ⬆ , ожидая увидеть "git status".В 66% случаев я получаю git status
, а в остальные 34% я получаю `git commit somefile -m" короткий комментарий "и снова нажимаю ⬆ , просто мигает курсор, и мне приходится нажимать Ctrl.-C для выхода из режима частичного завершения zsh.
Тот факт, что это не является обычной жалобой для oh-my-zsh, заставляет меня задуматься, что у меня что-то не так с настройкой.
Чтобы было понятнее, запустите zsh
без oh-my-zsh.
zsh -d -f
autoload -U up-line-or-beginning-search
zle -N up-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
Теперь попробуйте выполнить шаги, описанные выше.Вы получите последовательное поведение.