Поведение, которое вы ищете, воплощено в функции Emacs Lisp keyboard-quit
, по умолчанию связанной с C-g
(Control-g). Его поведение в контексте Emacs примерно эквивалентно обычной функции C-c
в оболочке; он прервет любой код на Лиспе и вернет вас на верхний уровень. (В частности, если вас просят ввести текст в минибуфере и вы решили, что не хотите делать то, что вам подсказывает, Cg - это то, как вы его отменяете.)
Одно нажатие клавиши Escape по умолчанию действует как мета-префиксная клавиша; то есть привязка клавиш, включающая мета-клавишу (например, M-x
, execute-extended-command
), будет работать так же хорошо, если вы нажмете Alt-x или если вы нажмете Escape, тогда нажмите X - Emacs не различает. Тройное нажатие клавиши Escape запустит keyboard-escape-quit
, что похоже на завершение keyboard-quit
но с большим количеством поведения «делай то, что я имею в виду» - то, что мне никогда не требовалось в течение нескольких лет использования Emacs, и действительно Я не знал об этом несколько минут назад, но вы можете найти это полезным.
Говоря о вещах, которые могут оказаться полезными: вы можете получить документацию по любой функции Emacs через функцию description describe-function
, которая вызывается как C-h f FUNCTION-NAME RET
(то есть нажмите и отпустите Control-h, нажмите f, введите имя функции в командной строке нажмите Return) или как M-x describe-function RET FUNCTION-NAME RET
. Для переменных это то же самое, за исключением C-h v
или describe-variable
, плюс имя переменной; для нажатий клавиш это C-h k
или describe-key
, и вы набираете аккорд клавиш, привязку которого вы хотите описать. Эти три функции, а также C-h m
для получения документации по основным и второстепенным режимам текущего буфера, чрезвычайно полезны для обнаружения того, как работает Emacs и что он может делать, и я с энтузиазмом рекомендую их вам как лучший и самый быстрый способ уменьшить степень которому Emacs кажется чуждым и пугающим.
Теперь, наконец, ответим на ваш актуальный вопрос: может быть возможно перенастроить отображение ключей по умолчанию в Emacs, чтобы оно различало клавишу Escape и мета-ключ. Однако я не рекомендую вам делать это по нескольким причинам.
Во-первых, хотя я уверен, что есть способ сделать это, он обязательно будет непонятным и хитрым, и у него будет большой потенциал, чтобы пойти не так, как надо, неочевидными способами - то, что, в то время как хорошо для Emacs ветераны, не очень рекомендуется, когда вы пытаетесь выучить редактор. Хуже того, если вы попытаетесь сделать это наивным и очевидным способом (например, M-: (global-set-key (kbd "ESC") 'keyboard-quit) RET
), вы полностью нарушите поведение мета-клавиш. На самом деле, чтобы заставить его работать правильно, потребуется спуститься на самые низкие уровни обработки входных событий Emacs - надеть фару, принести мачете и упаковать обед. (Может быть, два обеда.)
Во-вторых, даже если вы можете заставить эту привязку работать надежно, она очень нестандартна, в то время как любой Emacs, который вы используете где угодно, обязательно будет иметь C-g
привязанную к keyboard-quit
. Особенно во время изучения редактора, желательно как можно лучше познакомиться с привязками клавиш по умолчанию, вместо того, чтобы связывать вещи так, как это будет работать только с вашими файлами инициализации Emacs. (Если вы можете гарантировать, что вы никогда не будете использовать Emacs нигде, кроме как на своей собственной коробке, или что вы всегда сможете установить свои файлы инициализации, отлично! Действуй. Кроме того, для этой цели режим Vim, который является частью стандартной библиотеки Emacs, считается "по умолчанию", потому что вы можете вызывать его в любом правильно установленном Emacs через M-x vim-mode RET
или аналогичный.)
tl; dr: Вы, вероятно, можете сделать это с ESC, но для этого потребуется ужасная хакерская атака, если она вообще возможна, и вам лучше привыкнуть к средствам, которые Emacs предоставляет по умолчанию для вызова нужного поведения ,