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

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

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

  • Связанные с движением движения команды tput в zsh: можно ли настроить «четкое» поведение?
  • Исключение «sudo» из истории оболочки
  • Как подготовить файлы для rsync для файловой системы, не учитывающей регистр?
  • Ищете карту xinit / startx rabbithole
  • Существуют ли какие-либо соглашения для имени глобальной переменной, которые содержат результат функции?
  • псевдоним? не работает в zsh
  • экспортировать PATH только один раз для входа в zsh
  • Использование вложенного тройного выражения в командной строке .zshrc
  • 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 
    Interesting Posts

    Какие препараты следует выполнять перед переустановкой окон?

    Как распечатать все строки, не содержащие строку вместе со смежными строками?

    Загрузите статью с помощью cURL с динамической ссылкой для загрузки

    Как я могу автоматически закрыть сброшенные SSH-соединения?

    Получить информацию о поставщике и продукте сетевого адаптера

    Перенаправить консоль на последовательный порт

    Как сканировать оттенки серого с помощью простого сканирования?

    Как я могу получить приглашение имени пользователя на экране входа в Mint 16?

    определить, какая команда обработки GB_INIT ()

    Приложение, которое позволяет отображать содержимое буфера обмена и его тип MIME?

    Запустить программу для отображения текста при запуске перед входом в систему

    Попытка получить конкретную информацию из массива

    Замените все, кроме прописных букв, первым параметром (с sed)

    Как разделить строку на несколько символов?

    Можно ли немедленно заставить Linux сохранять изменения, внесенные во внешние файлы жесткого диска?

    Linux и Unix - лучшая ОС в мире.