sì, this mode is called electric. È possibile combinare il comportamento elettrico con questa semplice macro per il massimo 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)))
quindi attivarlo legando i caratteri appropriate nelle vostre modalità di programmazione preferito. Ad esempio, per 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)))
La modalità cperl fornisce questo come un incorporato:
;; 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!
Altre modalità potrebbero fornisce qualcosa di simile.
Vedi anche http://www.emacswiki.org/emacs/ AutoPairs. –
E se ho bisogno di qualcosa di più ... Molti editor hanno la funzione di chiusura automatica, ad es. tag HTML e inoltre inserire una linea vuota tra loro e fare il rientro corretto. Come posso ottenere questo in emacs? – jesper
@jesper Alcune delle modalità elencate potrebbero già fare ciò che si desidera. Sicuramente la modalità più generale, yasnippet (http://www.emacswiki.org/emacs/Yasnippet) può fare ciò che vuoi. Non è davvero una modalità di bilanciamento tra parentesi, quindi non la aggiungerò alla risposta, ma può fare quello che stai chiedendo. –