sí, this mode is called electric. Puede combinar el comportamiento eléctrico con este sencillo macro para el máximo 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)))
continuación, habilitarlo mediante la unión de los caracteres correspondientes a la misma en sus modos de programación favoritos. Por ejemplo, para 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)))
El modo CPerl proporciona esto como una orden interna:
;; 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!
Otros modos podían proporciona algo similar.
Vea también http://www.emacswiki.org/emacs/AutoPairs. –
Y qué pasa si necesito algo más ... Muchos editores tienen características que cierran automáticamente, p. etiquetas html y, además, inserte una línea vacía entre ellas y realice la sangría adecuada. ¿Cómo puedo lograr esto en emacs? – jesper
@jesper Es posible que algunos de los modos enumerados ya hagan lo que usted desea. Para asegurarse de que el modo más general, yasnippet (http://www.emacswiki.org/emacs/Yasnippet) puede hacer lo que quiera. No es realmente un modo de equilibrio entre paréntesis, así que no lo agregaré a la respuesta, pero puede hacer lo que me pides. –