oh-my-zsh курсор вверх до того, как программа закончила vs после того, как заставить их вести себя последовательно - PullRequest
0 голосов
/ 28 января 2019

Я заметил, что если я нажимаю стрелку вверх в приглашении, то я получаю предыдущую команду, и снова снова получаю команду перед этим.

Тогда как, если я нажимаю стрелку вверх перед предыдущейпрограмма завершила , затем вместо этого отображается предыдущая команда, курсор находится в конце строки, но oh-my-zsh теперь находится в режиме «поиск строк, начинающихся с ...», что означает, что я могу 'нажмите вверх, чтобы получить предыдущую команду.

Я уверен, что это поведение хорошо известно и ожидаемо, но на случай, если вы его не получите, вы можете повторить его так:

  1. Введите ls return
  2. Введите sleep 3 return
  3. подождите 3 секунды, пока не появится приглашение
  4. нажмите (должно отобразиться sleep 3)
  5. снова нажать (должно отобразиться ls)
  6. нажать вернуть (для запуска ls)
  7. Тип sleep 3 возврат (нажмите стрелку вверх до истечения 3 секунд)
  8. Это штеперь может показывать sleep 3
  9. Нажмите
    , он все равно будет показывать sleep 3, но он хочет, чтобы он показывал ls.Вместо этого он находится в «поиске команд, которые начинаются с режима sleep 3 вместо просто go to previous command режима.

Чтобы попытаться очистить в обоих случаях, это шаги

  1. ls возврат
  2. сон 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

Теперь попробуйте выполнить шаги, описанные выше.Вы получите последовательное поведение.

1 Ответ

0 голосов
/ 31 января 2019

Возможно, это излишнее решение, но, следуя этому руководству, вы увидите, что вы можете привязать новые действия к клавише со стрелкой вверх / вниз.Поэтому, если вы добавите:

bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down

к вашему ~/.zshrc, это должно удалить функциональность, о которой вы говорили.Мне удалось заставить его работать, сохраняя при этом обычные возможности поиска, но это не было тщательно протестировано и, вероятно, должно использоваться с осторожностью.

...