3

Итак, я наконец-то переключился на Emacs, не столько потому, что я все же убежден, что он сам по себе лучший редактор, а потому, что он, безусловно, имеет более мощные расширения. Я все еще использую vim-mode, хотя, возможно, это часть моей проблемы ... но я действительно не собираюсь отказываться от модового подхода, поэтому я, вероятно, останусь с ним.

Я неплохо ладлю, но одна вещь, которую я нахожу по-настоящему нервирующей, это поведение клавиши esc (которую я имею в положении shift-lock ). Я привык полагаться на это в большей или меньшей степени как на "кнопку паники", что может быть нехорошо, но я считаю, что в целом мне удается немного меньше заботиться о самих нажатиях клавиш и, следовательно, быстрее.

Я хотел бы, чтобы этот ключ просто выводил меня из любого минибуфера или специального режима редактирования в четко определенное нормальное состояние. Пожалуй, самое главное, я бы хотел, чтобы ничего не делать,

  • Имитация мета. Для чего у меня есть альтернативный ключ?
  • Закрой окна я даже не в то время.
  • Получение интерпретируется как окончательный ключ в некоторой последовательности ключей.
  • ...

Можно ли отключить все это и сделать esc действительным ключом escape? В некоторых случаях Vim-режим ведет себя так, как мне нравится, но особенно когда задействованы другие плагины, это часто ломается.

В качестве альтернативы, есть ли другие варианты, которые могут удовлетворить мой вид рабочего процесса?

2 ответа2

3

Вы можете использовать это в вашем файле инициализации Emacs:

;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)
1

Поведение, которое вы ищете, воплощено в функции 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 предоставляет по умолчанию для вызова нужного поведения ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .