История zsh (или, может быть, oh-my-zsh) путается с многострочными командами

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

Проблема возникает, если я набираю команду с несколькими линиями, например:

  • Как проверить, что замедляет мой запуск терминала?
  • Invoke zsh, затем * source * другой файл (при входе в интерактивный режим)
  • Http получить из оболочки в Mac OS X
  • Есть ли способ использования ctrl-r после ввода части команды в bash?
  • Каталог программ, перечисленных в bash
  • Установка рабочего каталога / диска по умолчанию в оболочке Emacs в Windows
  • for i in foo bar echo $i 

    То, если я позже нажму на стрелку вверх, как только он попадет в команду с несколькими линиями, тогда будет отображаться только результат, начинающийся с. Итак, если моя история похожа:

     touch foo rm foo for i in foo bar echo $i ls 

    И я нажимаю стрелку вверх. Я получаю команду ls затем команду multi-line for команды, и с этого момента я вижу только команды, которые есть в моей истории, а не команды rm или touch .

    Есть ли какой-нибудь способ поиска в хронологическом порядке, не застревая всякий раз, когда история попадает в многострочную команду?

  • RocketTab удаляется, но все еще преследует меня
  • Что означают скобки и число после команды Unix или функции C?
  • Как сделать звуковой сигнал ПК из командной строки Windows 7?
  • Почему в командной строке Windows не поддерживается ctrl + v?
  • Как запустить исполняемые файлы с помощью командной строки с именами пространства с именами и без запуска программы ожидания командной строки?
  • Windows "cmd" Замены
  • One Solution collect form web for “История zsh (или, может быть, oh-my-zsh) путается с многострочными командами”

    Описанное поведение связано с использованием up-line-or-search , который будет перемещаться по строке команды и в первой строке команды, которую он будет искать в истории для строк, начинающихся с первого слова.

    Объяснение для вашей проблемы: начиная с пустой строки любая строка в истории будет соответствовать. Пока обнаруживаются только однострочные команды, нет никакой разницы в поведении для up-history up-line-or-history или up-line-or-history . Но при достижении многострочной команды он больше не ищет, а проходит через линии. Когда верхняя строка будет достигнута, он начнет новый поиск, но теперь он ищет первое слово в этой строке вместо продолжения старого поиска любой строки.

    По умолчанию Up отображается в up-line-or-history , который возвращается назад через записи истории и в случае многострочных команд через каждую строку. up-history также будет проходить через историю, но обрабатывать многострочные команды, как однострочные. Оба будут обеспечивать ожидаемое поведение.

    Я бы предложил выполнить поиск конфигурации zsh и Oh-my-ZSH, где привязана up-line-or-search вниз, и заменить ее up-line-or-history или удалить привязку, поскольку up-line-or-history – это По умолчанию.

    Кроме того, в зависимости от используемого терминала ключевое секвентирование для Up равно либо ^[OA либо ^[[A Чтобы получить последовательность действий из вашей оболочки, оба должны быть установлены в одни и те же команды.

    Давайте будем гением компьютера.