Frage

Ich habe ein Plugin für vim genannt gesehen Automatisch schließen (entdeckt von Dies Post), der beim Eingeben automatisch die Schließklammer hinzufügt (',' {'usw.

Zum Beispiel; Wenn ich Folgendes tippe ( | ist der Cursor):

int main(|

Ich möchte das Schließen haben ) automatisch für mich eingefügt werden:

int main(|)

Kennt jemand eine ähnliche Funktion für EMACs - Google hat mich diesmal nicht gescheitert!

War es hilfreich?

Lösung

Es gibt auch 'paredit. Das Cheat Sheet Zeigt Ihnen alle verfügbaren Befehle an. gefällt es besser als der in einer andere Antwort vorgeschlagene elektrische Modus. Obwohl Paredit nur für () gilt, kann es Ihre Bedürfnisse möglicherweise nicht beeinträchtigen.

Aber um ehrlich zu sein, gibt es eine Reihe von Paketen um Klammern. Das Wiki hat sie alle Hier aufgeführt. Die Modi, die sich mit Ihrer Frage befassen, sind:

Andere Tipps

Jawohl, Dieser Modus wird als elektrisch bezeichnet. Sie können das elektrische Verhalten mit diesem einfachen Makro kombinieren, um einen maximalen Komfort zu erhalten:

(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)))

Aktivieren Sie es dann, indem Sie die entsprechenden Zeichen in Ihren bevorzugten Programmiermodi an sie binden. 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 eingebauter:

;; 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 könnten etwas Ähnliches bieten.

Cmarcelo hat geschrieben einen wunderbaren Beitrag darüber im Skelettmodus. Er zeigt auch, wie Sie die ausgewogene Halterung entfernen, wenn Sie die Eröffnungshalterung löschen und wie Sie mit dem Fall umgehen, dass Sie versehentlich die Schließklemme eingeben. (Übrigens kopieren beide Verhaltensweisen Textmate).

Aktualisieren:

Seit ich diese Antwort gepostet habe, habe ich festgestellt Autopair Das ist ein ziemlich perfektes System für diesen Anwendungsfall. Ich habe es viel benutzt und es geliebt.

Ich werde diesen Thread unterhalten und eine weitere Alternative anbieten. Es gibt kürzlich ein neues Projekt, das sich mit der automatischen Insertion von Paaren, der Verpackung von Regionen, der Navigation um ausgewogene Ausdrücke und vielem mehr befasst. Die Liste der Funktionen ist zu lang, um es hier zu geben, also werde ich einfach mit dem verlinkt SmartParens Github Repo wo Sie detaillierte Readme lesen können.

Es handelt sich um den oben genannten Autopair und liefert die meisten Kernmerkmale von Paredit (und erweitert alle Arten von verschiedenen Paaren, nicht nur diejenigen, die von EMACS-Syntaxtabellen erkannt werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top