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

Как ввести предыдущие строки при вводе команды, которая занимает несколько строк в Bash? Я пользователь Linux Mint (Lisa), использующий терминал GNOME.

Например, скажем, я печатаю:

$ echo "foo bar
> baz
>

А потом, когда я собираюсь набрать третью строку команды, вдруг понимаю, что я хочу, чтобы "foo" и "bar" были в отдельных строках. Как бы мне переместить курсор между "foo" и "bar" так, чтобы я мог нажать ввод и поместить их в отдельные строки?

(Это не так просто, как вы думаете. Стрелка вверх не работает, как и Ctrl-P. Поэтому, пожалуйста, попробуйте это перед публикацией! Спасибо!)

4 ответа

Решение

Это, к сожалению, до bash, а не в терминал. Ваши варианты:

  1. Используйте точку с запятой вместо новой строки, хотя даже тогда вы не можете одновременно перемещаться вверх по экранной строке, но должны использовать команды перемещения символов или слов. (Как ни странно, zsh по крайней мере, позволяет вам перемещаться внутри составной команды при редактировании истории, но не внутри текущей команды.) Иногда fc (который бросает вас в ваш редактор с помощью предыдущей команды) - это самый простой способ обработки сложных команд.

  2. Если вы используете Bash, используйте следующую комбинацию клавиш:

    ctrl x e
    

    Откроется команда, над которой вы работаете, используя ваш текстовый редактор. Сохраните файл и выйдите. (Я нашел команду в презентации Shell Hater.) У пользователей Zsh есть такая альтернатива.

Решение состоит в том, чтобы никогда не вводить команду до тех пор, пока многострочная строка не окажется правильной, просто наберите:CtrlvCtrlj, когда вы хотите перейти к следующей строке. Метаб, чтобы вернуться на слово.

решение

кредит на ответ@rici

Как ни странно, Ctrl + C - это то, что вы ищете.

когда ты на

$ echo "foo bar
> baz
>

просто нажмите Ctrl + C (отредактированная командная строка будет приостановлена) и нажмите Up (предыдущая история). Ваша подсказка будет: (обратите внимание на отсутствие>)

$ echo "foo bar
baz

Теперь вы можете перемещаться влево и вправо даже через линейные прыжки.

Есть только одна причуда, вы должны быть на последнем символе, чтобы добавить еще одну строку, поэтому перемещайтесь, чтобы редактировать существующие строки (переходите к началу с Ctrl + A) и нажимайте Enter, если этого достаточно, или переходите к концу (Ctrl + E), чтобы добавить больше строк с Enter. Другим недостатком является то, что Ctrl + _ (отменить) восстанавливает только изменения с последнего Ctrl + C

Скопируйте команды и вставьте их в блокнот, затем отформатируйте их оттуда. После этого вы можете скопировать свои команды обратно в терминал.

Другие вопросы по тегам