Bash: натискання втечі 4 рази


11

Коли я натискаю клавішу Escape 4 рази в баш-терміналі, він відображає щось подібне:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

Що це за особливість і як ці записи знаходять? (Під час другого натискання клавіші esc термінал подає звукове сповіщення.)

Відповіді:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

Це показує, що прив'язка клавіш Meta+Esc(та Ctrl+i) за замовчуванням у режимі редагування командного рядка Emacs є функцією Readline complete. MetaКлюч, як правило , Escна клавіатурах без явного Metaключа. Документація Readline для цієї функції говорить

Спроба виконати текст над точкою. Фактичне завершення виконується залежно від програми. Наприклад, Bash намагається завершити обробку тексту як змінної (якщо текст починається з $), ім'я користувача (якщо текст починається з ~), ім'я хоста (якщо текст починається з @) або команду (включаючи псевдоніми та функції). Якщо жодне з них не дає відповідності, намагається завершити ім'я файлу. Gdb, з іншого боку, дозволяє виконувати функції програми та змінні та намагається завершити ім'я файлу лише за певних обставин.


Що стосується Вашого коментаря до відповіді Ентона : Ні, натискання Escдвічі - це не те саме, що натискання в Tabцілому (якщо тільки це не в програмі, яка відображає їх обох на ті самі дії, як за замовчуванням робить Readline). Однак Ctrl+i це так само , як Tab, так само , як Ctrl+[та ж Esc. Це означає , що ви можете зробити завершення з Ctrl+[ Ctrl+[в , bashякщо ви хочете, до тих пір , як подвійний Escпов'язаний з Readline completeфункції. Це зручно, якщо, наприклад, ви працюєте на терміналі VT220, у якому відсутній ключ Escape:

Німецька клавіатура VT220


Кусалаланда, дякую за цю глибоку відповідь. Про ваш останній пункт: чому натискання Escдвічі (або \M-\e) не таке, як Tabу баші, якщо обидва виконують завершення?
flow2k

1
@ flow2k Це те саме, якщо і Esc-Esc, і Tab пов'язані з completeфункцією, яку вони мають за замовчуванням, але взагалі (тобто натискання клавіш не є "однаковими"). Ви не можете замінювати Tab Esc-Esc скрізь, лише в програмах, здатних до читання. Однак ви можете замінити Tab на Ctrl-i або Esc на Ctrl- [де завгодно.
Kusalananda

Наступне, якщо я можу: я не бачу Tabу висновку bind -p. Чому так? Може тому, що Tabце "жорстке кодування" і не може бути пов'язане?
flow2k

1
@ flow2k Ні, Tab ідентичний Ctrl-i. Шукайте \C-i. Це еквівалент на апаратному рівні.
Кусалаланда

8

Це називається завершення файлу, і якщо у вас немає жодної попередньої команди в командному рядку, bash запропонує вам виконати всі 2837 команд, про які він знає, як вбудовані, так і ті, що знайдені у вашому PATH

Представлені в упорядкованому порядку


1
Цікаво - так це те саме, що натиснути вкладку двічі. Можливо, 2 втечі = 1 вкладка?
flow2k
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.