Автоматически закрывать скобки в Emacs?
Я видел плагин для Vim под названием AutoClose (обнаружен в этом посте), который автоматически добавляет закрывающую скобку при вводе '(', '{' и т. Д.).
Например; когда я набираю следующее (|
это курсор):
int main(|
Я хотел бы закрытие )
быть вставленным автоматически для меня:
int main(|)
Кто-нибудь знает подобную функцию для emacs - на этот раз Google подвел меня!
4 ответа
Есть также 'paredit
, Шпаргалка показывает все доступные команды. случается, что это нравится лучше, чем электрический режим, предложенный в другом ответе. Хотя paredit относится только к (), он может не соответствовать вашим потребностям.
Но, если честно, в скобках есть куча пакетов. В вики есть все перечисленные здесь. Режимы для решения вашего вопроса:
Да, этот режим называется электрическим. Вы можете комбинировать электрическое поведение с этим простым макросом для максимального удобства:
(defun electric-pair ()
"If at end of line, insert character pair without surrounding spaces.
Otherwise, just insert the typed character."
(interactive)
(if (eolp) (let (parens-require-spaces) (insert-pair))
(self-insert-command 1)))
Затем включите его, привязав соответствующие символы в ваших любимых режимах программирования. Например, для PythonMode:
(add-hook 'python-mode-hook
(lambda ()
(define-key python-mode-map "\"" 'electric-pair)
(define-key python-mode-map "\'" 'electric-pair)
(define-key python-mode-map "(" 'electric-pair)
(define-key python-mode-map "[" 'electric-pair)
(define-key python-mode-map "{" 'electric-pair)))
Режим CPerl обеспечивает это как встроенный:
;; from my .emacs
(add-hook 'cperl-mode-hook
(lambda ()
(setq cperl-hairy nil
abbrev-mode t ;; automatic keyword expansion
cperl-highlight-variables-indiscriminately t
cperl-auto-newline t
cperl-auto-newline-after-colon t
cperl-regexp-scan nil
cperl-electric-keywords t
cperl-electric-linefeed t
cperl-electric-parens nil) ;; <------ electric parens!
Другие режимы могут обеспечить нечто подобное.
Я собираюсь некро эту тему и предоставлю другую альтернативу. Недавно появился новый проект, который занимается автоматической вставкой пар, переносом областей, перемещением по сбалансированным выражениям и многим другим. Список функций слишком длинный, чтобы дать здесь, поэтому я просто сделаю ссылку на репозиторий Smartparens Github, где вы можете прочитать подробный файл readme.
Это расширенный вариант вышеупомянутой AutoPair и предоставляет большинство основных функций paredit (и распространяется на все виды различных пар, не только те, которые распознаются синтаксическими таблицами emacs).
cmarcelo написал замечательный пост об этом в режиме скелета. Он также показывает, как снять уравновешенную скобку, если вы удаляете открывающую скобку, и как действовать в случае, если вы случайно набрали закрывающую скобку. (Между прочим, оба поведения копируют TextMate).
Обновить:
С тех пор, как я опубликовал этот ответ, я обнаружил, что Autopair является идеальной системой для этого случая использования. Я использовал это много и люблю это.