"Code formatieren" wie in Eclipse

7

In Eclipse kann ich treffen, CTRL + SHIFT + Fwodurch nicht nur der Einzug, sondern auch das Leerzeichen (zum Beispiel: c=a +b ;wird korrigiert c = a + b;) und die Zeilenlänge korrigiert werden . Ich suche ein ähnliches Tool für Emacs. Ich weiß nur, C-x h TABdass dies die Einrückung korrigiert, aber nichts weiter. Kennen Sie eine automatische Methode zum vollständigen Formatieren einer (insbesondere C / C ++) Quelldatei in Emacs?

Affe Überschall
quelle
Nee. Es sollte jedoch nicht zu schwierig sein, eine Integration für ein externes Tool wie AStyle oder ClangFormat zu schreiben. Hier ist eine relevante Frage: stackoverflow.com/questions/841075/…
Dmitry
Zum Einrücken können Sie dies mit dem Befehl Prelude-Cleanup-Buffer-or-Region schneller tun . Kopieren Sie die Funktionsdefinition und den Prelude-Indent-Sensitive-Modus in Ihren init.el. Binden Sie dann den Befehl an eine Taste wie C-c iund verwenden Sie ihn, wann immer Sie einrücken möchten, ohne den Cursor an eine andere Stelle zu bewegen.
Tu Do

Antworten:

8

Sie können ClangFormat verwenden , um dies zu erreichen. Nach der Installation des clang-formatTools können Sie clang-format.eldie entsprechenden Aktionen von Emacs ausführen. clang-format.elist auch bei MELPA erhältlich . Die bereitgestellten emacs-Befehle sind clang-format-bufferund clang-format-regionkönnen nach Bedarf gebunden werden. Beachten Sie, dass Sie die Formatierungsoptionen mithilfe einer .clang-formatDatei in einem Vorgängerverzeichnis anpassen können .

Pradhan
quelle
Ah, die Integration existiert also bereits. Beachten Sie jedoch, dass MELPA eine andere (anscheinend neuere) Version als die von Ihnen verlinkte vertreibt.
Dmitry
Clang-Format ist in der Tat ein großartiges Tool, das gut in Emacs integriert ist. Um die gleiche Bindung wie in Eclipse zu erhalten, können Sie Folgendes in Ihrem C / C ++ - Modus-Hook verwenden (define-key c-mode-base-map (kbd "C-S-f") 'clang-format-region). In neueren Versionen clang-formatwerden auch einige andere Sprachen wie Javascript und Java unterstützt, siehe LanguageKind auf dieser Seite: clang.llvm.org/docs/ClangFormatStyleOptions.html
Guillaume Papin
Okay, das funktioniert fast gut, hat nur eine Schwäche: Leerzeichen in Schließwinkeln in verschachtelten Vorlagenargumenten werden entfernt: List<pair<int, int> >->List<pair<int, int>> //Error!
Monkey Supersonic
@ user3000316 die Optionen für den Konfigurationswert „Standard“ Überprüfen Sie hier . Sie können festlegen, dass Cpp03dieses Problem behoben wird.
Pradhan