Клавиша Escape (удаление всей строки) оболочки Windows в Bash

13

В командной строке Windows (powershell и cmd) при нажатии Escклавиши в строке все, что вы ввели в командной строке, удаляется.

Я обнаружил, что нажатие Escклавиши в приглашении bash ничего не делает. Нажмите Escи затем backspaceудалите слово, но это должно быть сделано для каждого слова.

Я учу Bash постепенно и иногда набираю что-то глупое в середине строки и чувствую, что лучше печатать снова с нуля. Для этого нажатие backspace- единственный способ, который я нашел до сих пор.

Чем ты занимаешься?

Мне известны clearкоманда и Ctrl-Lярлык, но я не говорю об очистке всего терминала. Просто линия.

Animesh
источник
1
Некоторое время назад я опубликовал список полезных горячих клавиш readline на суперпользователе. Вы также можете найти их полезными. (Readline - это библиотека, которую bash использует для редактирования строк.)
jw013
эй jw013, спасибо за хорошую правку. :-)
Animesh

Ответы:

15

Вы хотите kill-whole-line, но это не связано по умолчанию в bash. backward-kill-line( CtrlX Backspace) и unix-line-discard( CtrlU) оба стирают из текущей точки в начало линии, поэтому просто перейдите в конец строки и используйте любой из них.

Игнасио Васкес-Абрамс
источник
Вы правы, это ни с чем не связано. Я только что узнал, что с помощью bind -P. Я думаю, Ctrl-Uи тогда Ctrl-Yэто единственный вариант.
Анимеш
Вы обнаружите, что ряд привязок по умолчанию получен из последовательностей клавиш в редакторе Emacs, и что эти привязки отображаются и в других местах.
Blrfl
@Blrfl, чтобы расширить ваш комментарий, большинство этих сочетаний клавиш были абстрагированы в библиотеку readline , которую используют большое количество программ командной строки, и поэтому все они имеют одинаковые клавиши редактирования строк.
jw013
6

Ctrl+aпереходит в начало строки и Ctrl+kудаляет до конца строки

Lemen
источник
Попробуйте ^Uсначала, в большинстве реализаций режима редактирования командной строки Emacs он уже удаляет всю строку. В тех случаях, когда он удаляет только левый курсор (например, GNU readline), нажмите ^Kпотом.
Мирабилось
3

Чтобы немного расширить ответ Игнасио Васкеса-Абрамса, вы можете получить (почти) Windows-подобное поведение с Escключом в bash, привязав kill-whole-lineк нему Escследующую команду

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

Если вы добавите строку в ваш ~/.inputrcфайл, привязка будет сохраняться между сеансами.

Однако обратите внимание, что это очень нестандартно, поскольку bash фактически использует Escключ в качестве другого модифицирующего ключа (например, непостоянного Alt или Ctrl). Если вы посмотрите на список существующих привязок клавиш (с помощью bind -P), вы, скорее всего, увидите несколько команд, привязанных к комбинациям клавиш, которые начинаются с "\ e" (например,

"\eb": backward-word

который устанавливает комбинацию Esc+ Bдля перемещения курсора назад к самому последнему началу слова - скорее как Ctrl+ , за исключением того, что вы должны продолжать отпускать EscB, конечно, конечно), если вы хотите сделать это несколько раз подряд ).

И это объясняет, почему я сказал, что поведение, которое вы получаете, почти похоже на Windows: когда вы нажимаете Esc, bash проверяет, используете ли вы его в сочетании с другой клавишей; так что, если вы связываете это kill-whole-line, есть небольшая задержка между нажатием (или, скорее, отпуском) Escи bash, очищающим линию для вас.

Однако, если вас это не волнует, и вы предпочитаете жить с задержкой, а не переучиваться на другое нажатие клавиши, это можно сделать.

(Примечание: большая часть информации, которую я здесь получил в результате чтения - и перехода по ссылкам - этот ответ .)

Уилсон Ф
источник
1
Это было очень полезно, спасибо, и работает более или менее так, как рекламируется. Но я обнаружил, что это вызывает некоторое раздражающее поведение, когда другие команды выполняются «недопустимо», например нажатие клавиши DEL в конце строки: это приведет к очистке строки и ее замене на [19;другой или похожий код перехода. В конце концов я нашел отображение "\e\e"в kill-whole-line(т.е. нажмите Esc дважды , чтобы очистить линию) хороший компромисс.
j_random_hacker
@j_random_hacker: Хм, мне это нравится. В Escлюбом случае я часто бью несколько раз, так что могу попробовать. В настоящее время я связан с Ctrl+, Delно я никогда этого не помню.
Уилсон Ф