Разделить существующую командную строку на несколько строк

8

Я понимаю, что могу ввести \ enterв конце bashкомандной строки, чтобы продолжить эту команду в другой строке. Но как я могу разделить командную строку приглашения - которая уже была набрана полностью - на две части?

Например, как я могу разорвать эту строку прямо thenбез необходимости обрезать остаток и набирать его заново?

$ if true; then ls; fi
Н.Р.
источник
1
Если вы используете интерактивную командную строку, есть ли какая-то особая причина, по которой вам нужно это делать, помимо того, что ваша история оболочки выглядит красивее? Функционально, дополнительные символы новой строки не имеют значения для оболочки. Если вы набираете длинный сложный фрагмент оболочки, лучше всего использовать редактор. Посмотрите и на fcкоманду - она ​​доступна практически во всех оболочках.
jw013
Не красивее, а просто чтобы сделать сложные команды удобочитаемыми.
Н.Р.

Ответы:

4

Новая строка символ LF (перевод строки), также известный как Control-J. Если вы нажмете Ctrl+ J, команда будет выполнена так accept-lineже, как и Returnклавиша. Чтобы вставить буквенный символ НЧ, нажмите Ctrl+ V Ctrl+ J. Команда Ctrl+ V( quoted-insert) вставляет следующий символ буквально. Таким образом, чтобы разбить строку, вы можете ввести \ Ctrl+ V.

Если вы делаете это часто, вы можете сделать это макросом:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Жиль "ТАК - перестань быть злым"
источник
6

Вы можете использовать edit-and-execute-command, обычно сопоставленный с Ctrl+ x+ e, чтобы открыть текущую команду в редакторе . При выходе из редактора команда будет запущена.

l0b0
источник
1
Приятно - никогда не знал этого. Вы должны убедиться , что ваша переменная $ EDITOR окружения установлена на что - то - я добавил vimк моему так: export EDITOR=vim.
SLM
1
Как я могу отменить выполнение команды при выходе из редактора? Я использую :q!или ZQно безрезультатно.
Бирей
1
@Birei: удалить все строки, затем сохранить и выйти (например, ggdG:wqили :%d|wq, и т. Д.). Команда останется в истории (возможно, как дубликат, если вы вспомнили ее из более ранней записи), но она не будет выполнена.
Приостановлено до дальнейшего уведомления.
@DennisWilliamson: Ух ты! Почти три года спустя я еще не решил эту проблему, большое спасибо, потому что решение было таким простым, а простота всегда лучше.
Бирей
2

Примечание - этот ответ относится только к vi и vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Для редактирования текущей типизированных линии, ударил ESC(чтобы попасть в viили vimкомандный режим), а затем введите vили vi.

Обратите внимание, что все команды редактирования vi / vim работают. например

  • ESC+ A ставит в конец текущей набранной строки.
  • ESC+ 0 помещает курсор в начало строки.
suspectus
источник
Отлично. Это определенно делает редактирование командных строк намного проще. Но знаете ли вы, как вставить символ новой строки, не переходя в визуальный режим?
Н.Р.
2
Спасибо. CTRL+ vтогда CTRL+ jбросить перевод строки должен работать.
Подозреваемый