Переход к предыдущей строке многострочной команды

При редактировании многострочных команд, с экранированными символами новой строки, я не могу перемещаться вверх по линиям.

Например, предположим, что я вхожу в echo \ one one line, затем нажимаю Enter , а затем я хочу отредактировать echo \ часть команды. Нажатие кнопки « Вверх» не возвращается к первой командной строке.

Это работает для длинных команд, которые переносятся, но не с экранированными символами новой строки:

 _physical_up_line() { zle backward-char -n $COLUMNS } _physical_down_line() { zle forward-char -n $COLUMNS } zle -N physical-up-line _physical_up_line zle -N physical-down-line _physical_down_line bindkey -M vicmd "R" physical-up-line bindkey -M vicmd "N" physical-down-line 

  • Как запрограммировать передачу сигнала разрыва (Magic SysRq) через последовательный терминал
  • В zsh как я могу перечислить все переменные среды?
  • предотвращение очистки экрана при выходе из сеанса ssh
  • Как запустить указанный код с помощью getopts, когда параметры или аргументы не заданы?
  • сбой команды ожидания
  • сценарий к cd во многие каталоги и выполнить команду
  • Отменить завершение, но только завершение, в zsh
  • Поиск не работает
  • 2 Solutions collect form web for “Переход к предыдущей строке многострочной команды”

    Когда вы нажимаете Enter (команда accept-line ), текущая строка анализируется и выполняется по расписанию. Если строка синтаксически неполна (например, echo \ или for x in foo ), она не выполняется, но она уже сохранена. Вы можете видеть, что zsh находится в этом состоянии, потому что он показывает приглашение PS2 вместо обычного PS1 .

    Насколько я знаю, нет встроенного способа редактирования таких сохраненных строк. Это должно выполняться, сохраняя текущую строку без ее выполнения и ссылаясь на предыдущую строку истории для редактирования.

    Самый простой способ получить предыдущую строку – убедиться, что текущая строка не завершена (например, введите \ в конце), примите ее (нажмите Enter ), затем отмените ее (нажмите Ctrl + C ). Затем вы можете вызвать всю сохраненную команду как одну строку истории в виде одного многострочного буфера, нажав « Вверх» .

    Предполагая, что вы используете по умолчанию emacs keybindings, попробуйте использовать Alt + Enter вместо простого Enter, чтобы запланировать линию для выполнения.
    Для меня, когда линии добавляются таким образом, я могу легко перемещаться вверх и вниз по этим линиям. например, когда в командной строке zsh:

     % cat << EOF<ALT-ENTER> first line<ALT-ENTER> second line<ALT-ENTER> thi ^ pressing <UP> moves up a line like you would expect 
    Linux и Unix - лучшая ОС в мире.