21

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

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

$ echo "foo bar
> baz
>

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

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

3 ответа3

14

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

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

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

    ctrl x e
    

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

9

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

решение

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

1

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

когда ты на

$ echo "foo bar
> baz
>

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

$ echo "foo bar
baz

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .