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

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

Например, предположим, что я вхожу в 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 

  • Создание оболочки zsh по умолчанию без доступа root
  • Запись zsh и вывод на другую команду
  • Проблема с zsh segfaulting: как продолжить оценку проблемы?
  • Как я могу определить, контролируется ли оболочка из SSH?
  • Как я могу изменить umask только для одной команды?
  • zsh compinit: небезопасные каталоги, запустить compaudit для списка
  • Как я могу подавить пространство между сгенерированными аргументами во время расширения фигурной скобки?
  • Синтаксис команды повторения в 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 - лучшая ОС в мире.