Это показывает, что связывание клавиш по умолчанию Meta+Esc(и Ctrl+i) в режиме редактирования командной строки Emacs - это функция Readline complete. MetaКлюч, как правило , Escна клавиатурах без явного Metaключа. Документация Readline для этой функции говорит
Попытайтесь выполнить завершение над текстом до точки. Фактическое выполненное завершение зависит от приложения. Bash, например, пытается завершить обработку текста по очереди как переменная (если текст начинается с $), имя пользователя (если текст начинается с
~), имя хоста (если текст начинается с @) или команда (включая псевдонимы и функции). Если ни один из них не приводит к совпадению, выполняется попытка завершения имени файла. Gdb, с другой стороны, позволяет завершать программные функции и переменные и только пытается завершить имя файла при определенных обстоятельствах.
Относительно вашего комментария к ответу Anthon : Нет, Escдвойное нажатие - это не то же самое, что Tabобщее нажатие (если только это не в программе, которая отображает их оба на одно и то же действие, как Readline делает по умолчанию). Однако Ctrl+iэто так же , как Tab, так же , как Ctrl+[та же Esc. Это означает, что вы можете выполнить завершение с помощью Ctrl+[Ctrl+[in, bashесли хотите, если double Escсвязан с completeфункцией Readline . Это удобно, например, если вы работаете с терминалом VT220, в котором отсутствует клавиша Escape:
Кусалананда, спасибо за этот подробный ответ. О вашем последнем замечании: почему нажатие Escдважды (или \M-\e) не такое, как Tabв bash, если оба выполняют завершение?
flow2k
1
@ flow2k То же самое, если и Esc-Esc, и Tab связаны с completeфункцией, которой они являются по умолчанию, но не обычно (т.е. нажатия клавиш не «одинаковы»). Вы не можете заменить Tab на Esc-Esc везде, только в программах с поддержкой readline. Однако вы можете заменить Tab на Ctrl-i или Esc на Ctrl- [где угодно.
Кусалананда
Продолжение, если можно: я не вижу Tabв выводе bind -p. Это почему? Может быть потому, что Tabон «жестко закодирован» и не может быть связан?
flow2k
1
@ flow2k Нет, Tab идентичен Ctrl-i. Ищите \C-i. Это эквивалент на аппаратном уровне.
Кусалананда
8
Это называется завершением файла, и если у вас нет какой-либо предыдущей команды в командной строке, bash предложит вам выполнить все 2837 известных ему команд, как встроенных, так и найденных в вашем. PATH
Esc
дважды (или\M-\e
) не такое, какTab
в bash, если оба выполняют завершение?complete
функцией, которой они являются по умолчанию, но не обычно (т.е. нажатия клавиш не «одинаковы»). Вы не можете заменить Tab на Esc-Esc везде, только в программах с поддержкой readline. Однако вы можете заменить Tab на Ctrl-i или Esc на Ctrl- [где угодно.Tab
в выводеbind -p
. Это почему? Может быть потому, чтоTab
он «жестко закодирован» и не может быть связан?\C-i
. Это эквивалент на аппаратном уровне.Это называется завершением файла, и если у вас нет какой-либо предыдущей команды в командной строке, bash предложит вам выполнить все 2837 известных ему команд, как встроенных, так и найденных в вашем.
PATH
Представлены в отсортированном порядке
источник