ja, this mode is called electric. Sie können das elektrische Verhalten mit diesem einfachen Makro für maximalen Komfort kombinieren:
(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)))
es dann aktivieren, indem Sie die entsprechenden Zeichen, um es in Ihren Lieblings-Programmiermodi verbindlich. Zum Beispiel für 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)))
Der cperl Modus bietet dies als builtin:
;; 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!
Andere Modi etwas ähnliches liefert könnte.
Siehe auch http://www.emacswiki.org/emacs/AutoPairs. –
Und was ist, wenn ich etwas mehr brauche ... Viele Editoren verfügen über eine Funktion, die z. HTML-Tags und zusätzlich eine leere Zeile zwischen ihnen einfügen und richtige Einrückung. Wie kann ich dies in Emacs erreichen? – jesper
@jesper Einige der aufgelisteten Modi können bereits das tun, was Sie möchten. Sicherlich kann der allgemeinere Modus, yasnippet (http://www.emacswiki.org/emacs/Yasnippet) tun, was Sie wollen. Es ist nicht wirklich ein Balancing-Modus für die Klammern, also werde ich ihn nicht zur Antwort hinzufügen, aber er kann tun, was du verlangst. –