19

Скажем, я набрал команду в терминале 'mv * .jpg ..\photos' и, когда я печатаю, понял, что больше не хочу выполнять эту команду. Я хочу просто удалить все утверждение. Я не хочу очищать весь экран или удалять историю bash. Я просто хочу прервать текущую строку и стереть ее.

Есть ли сочетание клавиш или мне нужно удалить каждый символ?

3 ответа3

28

Предполагая, что вы находитесь в bash, используйте Ctrl + U.

7

Многие программы, которые ждут, когда вы наберете командную строку, а затем выполните эту строку, включая bash, принимают Ctrl+C, чтобы обозначить «Прервать текущую задачу и вернуться к основному приглашению».

Некоторые программы, в том числе bash, принимают Ctrl+U(команда «Очистить» от терминала в OS X) для обозначения «стереть начало строки до курсора» (или «стереть всю строку»).

В bash наблюдаемые различия между Ctrl+C и Ctrl+U включают:

  • Вы можете отменить Ctrl+U, но не Ctrl+C.
  • Ctrl+U сохраняет часть строки после курсора, если таковая имеется.
  • Ctrl+U стирает затронутый текст с экрана; Ctrl+C показывает новый запрос под текущей строкой.

Иногда вы хотите прекратить вводить команду, но ввести ее в историю оболочки, чтобы запустить позже. Полезный трюк - поставить # в начале строки и выполнить ее: поскольку строка теперь является комментарием, она ничего не будет делать. В bash есть комбинация клавиш: Alt+#.

1

Существует функция readline которая, вероятно, не привязана к нажатию клавиши с именем kill-whole-line , которая убивает всю строку, в отличие от уничтожения только части перед курсором (unix-line-discard которая в некотором смысле неверна и связана Ctrl - U).

Вы можете связать это с любым доступным нажатием клавиши. Мне нравится Shift Alt - U, так как это связанная функция. Это нажатие клавиши может быть связано с do-lowercase-version что означает, что оно делает то, что делает несмещенная версия (в данном случае upcase-word). Поскольку для этого нам не нужны два ключа, давайте использовать этот.

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

bind '"\eU":kill-whole-line'

или сделайте его постоянным, поместив эту строку в ваш файл ~/.inputrc :

"\eU":kill-whole-line

Чтобы отменить Ctrl- u или Shift Alt- U (или любую операцию, которая может быть отменена), нажмите Ctrl- Shift- _ (подчеркивание) или Ctrl- x Ctrl- u (два нажатия клавиш). Или вы можете вставить (вернуть) то, что вы убили, нажав Ctrl- y, что можно повторить, если вам нужно несколько копий этого текста.

Кстати, если вы хотите убить текст от курсора до конца строки, вы можете нажать Ctrl - k. Таким образом, вместо привязки, описанной выше, вы можете убить целую строку, нажав Ctrl - u Ctrl - k. Только часть, убитая вторым из этих нажатий клавиш, будет сохранена в буфере уничтожения, но вы все равно можете сделать отмену дважды, чтобы восстановить их оба.

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