Вопрос по input, bash – В bash как очистить текущий ввод?

163

Предположим, что в bash вы начинаете писать команду вроде:

<code>$ rm -rf /foo/bar/really/long/path/here
</code>

и затем поймете, что вы не хотите выполнять это в конце концов. Есть ли способ очистить ввод одним или двумя нажатиями клавиш?

То, что я делал в последнее время, это добавление эха и заключение ввода в кавычки (Ctrl + A,echo ", Ctrl + E,")))))))) затем нажимаю ввод Есть ли более быстрый способ?

<kbd> Ctrl </ kbd> - <kbd> C </ kbd>, если вы хотите сохранить историю, обратитесь к Stackoverflow.com / а / 9679852/6521116 Kris Roofe
Или, предположим, вы вставили команду и поняли, что это был неправильный однострочный текст. Backspace становится действительно старым после примерно 20 символов! bgStack15

Ваш Ответ

11   ответов
267

Ctrl-U, чтобы удалить все перед курсором. Удаленная команда будет сохранена в буфере. Ctrl-Y, чтобы вставить удаленную команду.

(Необязательно: нажмитеКоне или Ctrl-E чтобы сначала перейти к концу ввода.)

Или нажмите Ctrl-C чтобы прервать ввод текста.

Есть предостережение: Ctrl-C убьет текущее приглашение, запустит новое приглашение и установит код возврата равным 1. user716468
Не привыкай, используй Ctrl-U. Ctrl-C не так уж плох в bash, но если у вас есть, например, запрос клиента mysql, Ctrl-C отключится от сервера, который действительно раздражает. Christian
Заметим, что во многих системах также есть терминальный символ kill, который до сих пор убивает ввод. Часто это control-X. Вы можете проверить с помощьюstty -a. И это будет работать с любой программой, которая активно не изменяет элементы управления терминалом. Jonathan Leffler
Ctrl-A, за которым следует Ctrl-K, также работает. «Убитый» текст сохраняется, и вы можете вставить его, используя Ctrl-Y. Эти нажатия клавиш на самом деле происходят из библиотеки read line: Cnswww.cns.cwru.edu / PHP / Чет / Readline / rluserman.html .. так что вы можете найти их в любом инструменте, пользовательский интерфейс которого использует библиотеку (на самом деле Emacs, bash и т. д.). Вы можете настроить его поведение, отредактировав файл .inputrc (см. Ссылку выше для получения более подробной информации). rkachach
91

Ctrl+U. Это очищает строку ввода.

Спасибо, я почти принял это как ответ. Но я обнаружил, что он очищает только ввод перед курсором. В некоторых случаях я нахожусь в процессе редактирования команды, поэтому я предпочел бы запомнить Ctrl + C вместо Ctrl + U как просто «отбросить текущий ввод». user85509
Если используется под Zsh, он очистит строку:) ggustafsson
30

http: //www.ice2o.com/bash_quick_ref.htm в то время как Поиск.

@ Ct + e (если не в конце строки) плюс @ Ct + u сделаю это

2

vi mode (установите с помощьюset -o vi), затем нажмите Esc, чтобы переключиться в нормальный режим vi, и введитеdd чтобы удалить текущую строку!

20

Ctrl-U, Ctrl-K тоже делает свое дело.

Ctrl-U удаляет все от начала строки до курсора, Ctrl-K удаляет все от курсора до конца строки. (Иногда полезно использовать только один из них.)

9

Esc#. Это будет предшествовать#имвол @ (таким образом делая строку комментарием) и затем нажмите ввод. Если вы затем решите, что вам все еще нужна команда, она все еще есть в вашей истории

В большинстве терминалов это также то же самое, что Alt + #, что делает его одним нажатием клавиш Dolda2000
Простое, но умное решение, и я думаю, что это более удобный способ отменить команду. Именно то, что я искал:) Cas
13

@ Ct+c - очищает всю строку независимо от того, где находится курсор.

@ Ct+u - очищает линию от позиции курсора до начала.

"Учтите, что использование C-u (или C-e, а затем C-u) сохранит то, что вы очистите, в буфере, чтобы вы могли затем вставить его позже, используя C-y." Markisisme более простая команда ctrl + _. / Stackoverflow.com вопросы / 1056440 / ... ответил Джон Куг - только что начал stackoverflow не хватает очков, чтобы добавить комментарий к вашему ответу. vks
3

Ctrl-U (или Ctrl-E а потом Ctrl-U) будет хранить то, что вы очищаете, в буфере, чтобы вы могли вставить его позже, используя Ctrl-Y.

9

Esc плюс Backspace in bash очистит все до позиции курсора.

(В Cygwin это очистит ввод до следующего слова. Слова разделяются пробелами, подчеркиванием, ...)

2

Ctrl-X, Ctrl-U

В качестве альтернативы вы можете использовать:

Esc-D

который требует в ~ / .inputrc:

"\ed": kill-whole-line 

видеть:http: //codesnippets.joyent.com/posts/show/169

2

Knittl's ответ, которая сохраняет строку в истории консоли путем добавления префикса к хешу. Преодоление недостатков буфера обмена, таких как случайная перезапись или невозможность просмотра линии реза для справки.

Комментная строка и возврат нового приглашения

Используйте любую комбинацию клавиш:

Esc,# Alt+#

Хэш-символ# будет добавляться к строке, превращая всю строку в комментарий. Он также вернет новое приглашение, как если бы пользователь нажал клавишу ввода. например

$ #rm -rf /foo/bar/really/long/path/here
$
Восстановить прокомментированную строку

Чтобы восстановить старую строку из истории консоли, используйте один из следующих ярлыков:

Up Ctrl+p

Повторяйте комбинацию клавиш, пока не появится нужная строка.

Быстрое удаление хеш-префикса

Чтобы удалить хеш строки# Префикс есть несколько различных вариантов:

Удалите первый символ и немедленно выполните команду:

Esc,1, Esc,# Alt+-, Alt+#

Переместите курсор для запуска и удаления первого символа без выполнения команды:

Главна, Удалят Ctrl+a, Ctrl+d

Похожие вопросы