есть, this mode is called electric. Вы можете комбинировать электрическое поведение с помощью этого простого макроса для максимальной Confort:
(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!
Другие режимы могли обеспечивает что-то подобное.
См. Также http://www.emacswiki.org/emacs/AutoPairs. –
И что, если мне нужно что-то еще ... Многие редакторы имеют функцию автоматического закрытия, например. html и, кроме того, вставить пустую строку между ними и сделать правильный отступ. Как я могу достичь этого в emacs? – jesper
@jesper Некоторые из перечисленных режимов могут уже делать то, что вы хотите. Конечно, более общий режим, yasnippet (http://www.emacswiki.org/emacs/Yasnippet) может делать то, что вы хотите. Это не режим балансировки в скобках, поэтому я не буду добавлять его в ответ, но он может делать то, что вы просите. –