Оболонка Windows Клавіша Escape (видалити всю лінію), еквівалентна в Bash


13

У командному рядку Windows (powershell та cmd) при натисканні Escклавіші під час рядка видаляється все, що ви ввели у відповідь.

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

Я навчаюсь Баша поступово і іноді набираю щось дурне посередині рядка і вважаю, що краще набрати з нуля знову. Для цього натискання backspace- єдиний спосіб, який я знайшов до цих пір.

Що ти робиш?

Мені відомо про clearкоманду та Ctrl-Lярлик, але я не говорю про очищення всього терміналу. Просто лінія.


1
Якось назад я опублікував список корисних комбінацій клавіш для читання на суперусері. Ви також можете їх знайти корисними. (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видаляє до кінця рядка


Спробуйте ^Uспочатку, у більшості реалізацій режиму редагування командного рядка Emacs він уже видаляє повний рядок. У тих випадках, коли він видаляє лише курсор, що залишився від курсора (наприклад, GNU readline, наприклад), натисніть ^Kпотім.
mirabilos

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+ , за винятком того, що вам потрібно продовжувати випускати Esc(як і B, звичайно), якщо ви хочете робити це більше одного разу поспіль ).

І це пояснює, чому я сказав, що поведінка, яку ви отримуєте, майже схожа на Windows: коли ви натискаєте Esc, bash перевіряє, чи використовуєте ви її в поєднанні з іншою клавішею; тож, якщо ви прив’язуєте його kill-whole-line, існує деяка затримка між натисканням (а точніше, вивільненням) Escі ударом для очищення лінії для вас.

Однак якщо вам нічого з цього не байдуже, а ви хочете скоріше жити із затримкою, ніж перекваліфікуватись на інший набір клавіш, це можна зробити.

(Примітка. Більшість інформації, яку я отримала в результаті прочитання цієї відповіді та переходу за посиланнями в ній .)


1
Це було дуже корисно, дякую, і працює більш-менш, як рекламується. Але я виявив, що це викликає деяку дратівливу поведінку, коли інші команди виконуються "недійсно", наприклад, натискання клавіші DEL в кінці рядка: Це очистить рядок і замінить його [19;або подібним схожим кодом втечі. Зрештою я знайшов відображення "\e\e"в kill-whole-line(тобто натисніть Esc двічі , щоб очистити лінію) хороший компроміс.
j_random_hacker

@j_random_hacker: Хм, мені це подобається. Я часто потрапляю Escкілька разів у будь-який момент, тому я можу спробувати це. Зараз у мене це є Ctrl+, Delале я ніколи цього не пам'ятаю.
Вілсон F
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.