В bash как очистить текущий ввод?

172

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

$ rm -rf /foo/bar/really/long/path/here

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

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

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

Ответы:

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

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

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

Джон Кугельман
источник
28
Есть предостережение: Ctrl-C убьет текущее приглашение, запустит новое приглашение и установит код возврата
равным
14
Не привыкайте к этому, используйте Ctrl-U. Ctrl-C не так уж плох в bash, но если у вас есть, например, приглашение клиента mysql, Ctrl-C отключится от сервера, который действительно раздражает.
Кристиан
1
Обратите внимание, что во многих системах есть также терминальный символ kill, который до сих пор убивает ввод. Часто это control-X. Вы можете проверить с stty -a. И это будет работать с любой программой, которая активно не изменяет элементы управления терминала.
Джонатан Леффлер
Ctrl-A, сопровождаемый Ctrl-K, также работает. «Убитый» текст сохраняется, и вы можете вставить его, используя Ctrl-Y. Эти нажатия клавиш на самом деле происходят из библиотеки read line: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. так что вы можете найти их в любом инструменте, пользовательский интерфейс которого использует библиотеку (на самом деле Emacs, bash, и т.д..). Вы можете настроить его поведение, отредактировав файл .inputrc (см. Ссылку выше для получения более подробной информации).
ркачач
93

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

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

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

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

руб
источник
13

Есть два варианта сделать это

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

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

VKS
источник
2
«Учтите, что использование Cu (или Ce, а затем Cu) сохранит то, что вы очистите, в буфере, чтобы вы могли затем вставить его позже, используя Cy». Markisisme более простая команда ctrl + _. stackoverflow.com/questions/1056440/… ответил Джон Куг - только что начал stackoverflow, не хватает очков, чтобы добавить комментарий к вашему ответу.
vks
9

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

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

Нажатие EscплюсBackspace в bash очистит все до положения курсора.

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

Nippey
источник
3

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

goncalotomas
источник
3

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

Helmyano
источник
3

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

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

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

  • Esc,#
  • Alt+#

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

$ #rm -rf /foo/bar/really/long/path/here
$

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

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

  • Up
  • Ctrl+p

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


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

Удалить хеш строки # префикс доступно несколько различных опций:

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

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

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

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
источник
2

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

Ctrl- X, Ctrl-U

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

Esc-D

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

"\ed": kill-whole-line 

см .: http://codesnippets.joyent.com/posts/show/1690

goncalotomas
источник
Если вы хотите, чтобы только клавиша escape "\e\e": kill-whole-line
очищала