"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?


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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.