ClangFormat ist eines der besten Tools zum automatischen Formatieren von Quellcodes in C, C ++, Java, JavaScript, Objective-C und C #. Es gibt Plugins für gängige Entwicklungsumgebungen (IDEs), aber häufig müssen Sie eine Datei oder einen Teil einer Quelldatei schnell formatieren, ohne eine umständliche IDE zu starten, mit Formatierungseinstellungen und verschiedenen Versionen von ClangFormat experimentieren und Änderungen schnell rückgängig machen. Die Verwendung der Konsolenversion von ClangFormat für diesen Zweck ist unpraktisch. Eine mögliche Lösung besteht darin, ClangFormat über einen Texteditor aufzurufen. Die
offizielle Website beschreibt die Integration in Vim, Emacs und einige andere, es gibt jedoch keine Informationen zur Integration in Notepad ++. Das Folgende ist eine einfache Anweisung für Notepad ++ (für Windows).
Anfangsanforderungen
- Formatieren einer in Notepad ++ geöffneten Datei mit ClangFormat;
- Formatieren des ausgewählten Fragments in der Datei;
- Änderungen verwerfen;
- Formatierung des Schaltstils (Regelsatz);
- Wechseln zu einer anderen Version von ClangFormat
- Verwenden Sie nach Möglichkeit Standardtools, ohne ClangFormat neu zu erstellen und ohne ein neues Plugin für Notepad ++ zu schreiben.
Installation und Einrichtung
1. Wenn Notepad ++ noch nicht installiert ist, laden Sie es herunter und installieren Sie es
https://notepad-plus-plus.org2. Installieren Sie in Notepad ++ das NppExec-Plugin
Mit NppExec können Sie Anwendungen von Drittanbietern aus Notepad ++ aufrufen und mit den Komponenten der Scintilla-Bibliothek interagieren, auf deren Grundlage Notepad ++ geschrieben wird.
Plugins –> Plugin Admin... –> NppExec –> Install
Notepad ++ wird neu
<Notepad++>/plugins/NppExec/
und der Menüpunkt
Plugins –> NppExec
3. Laden Sie die ausführbare ClangFormat-Datei herunter
Dazu finden und laden wir auf der Seite
https://llvm.org/builds/ die Installationsdatei für Windows herunter, zum Beispiel
LLVM-XXX-rYYYYYY-win64.exe
. Sie können nicht das gesamte Paket installieren,
clang-format.exe
Datei
clang-format.exe
vom
clang-format.exe
extrahieren. Sie können 7-zip verwenden: Löschen Sie die Erweiterung
.exe
aus der
.exe
, öffnen Sie die Datei mit 7-zip und extrahieren Sie
clang-format.exe
aus dem Unterverzeichnis
bin/
. Wir
clang-format.exe
im
clang-format.exe
<Notepad++>/plugins/NppExec/clang-format/
.
4. Fügen Sie Konfigurationsdateien für ClangFormat hinzu
Konfigurationsdateien sollten den Namen
.clang-format
oder
_clang-format
. Sie enthalten eine Reihe von Formatierungsregeln (Stilen), deren Format im
Handbuch ClangFormat-Stiloptionen beschrieben ist.
Zum Beispiel verwenden wir Dateien aus den
Linux-Kernel- und
Qt- Projekten.
Die von GitHub heruntergeladenen Dateien im
.clang-format
werden in den entsprechenden Verzeichnissen abgelegt:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/
5. Erstellen Sie ein Skript für NppExec
Öffnen Sie das Fenster zum Bearbeiten und Ausführen von Skripten. NppExec
Plugins –> NppExec –> Execute...
oder drücken Sie
F6
. Kopieren Sie den folgenden Skripttext, fügen Sie ihn in das Fenster ein und speichern Sie das Skript mit dem Namen
clang-format
mit der Schaltfläche
Save...
NppExec-Skript // Hide console NPP_CONSOLE 0 //------------------------------------------------------------------------------ // Uncomment a line to select a style //set style = LINUX_KERNEL set style = QT //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ set clangformatexe = $(CWD)\plugins\NppExec\clang-format\clang-format.exe set clangformatcfgdir = $(CWD)\plugins\NppExec\clang-format set tmpdir = $(SYS.TEMP) set clangformatcfgfile = $(clangformatcfgdir)\$(style)\.clang-format set srcfiletmp = $(tmpdir)\~src.tmp //------------------------------------------------------------------------------ cmd.exe /c if exist "$(clangformatexe)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatexe)" not found exit endif cmd.exe /c if exist "$(clangformatcfgfile)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatcfgfile)" not found exit endif // Copy $(clangformatcfgfile) to $(tmpdir)\.clang-format if their temestamps are different cmd.exe /v /c " for %i in ("$(clangformatcfgfile)") do set date1="%~ti" && for %i in ("$(tmpdir)\.clang-format") do set date2="%~ti" && if not "!date1!"=="!date2!" ( echo !date1! != !date2! && echo COPYING $(clangformatcfgfile) to $(tmpdir)\ && copy "$(clangformatcfgfile)" "$(tmpdir)\" /Y )" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR copying "$(clangformatcfgfile)" to "$(tmpdir)" exit endif // Get selected text length sci_sendmsg SCI_GETSELTEXT // If nothing is selected - select the current line if $(MSG_RESULT) == 1 then sci_sendmsg SCI_VCHOMEWRAP sci_sendmsg SCI_LINEENDWRAPEXTEND endif // Save selected text to $(srcfiletmp) sel_saveto "$(srcfiletmp)" :a cmd.exe /c if exist "$(srcfiletmp)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(srcfiletmp)" not found exit endif // Run ClangFormat $(clangformatexe) -i -style=file "$(srcfiletmp)" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR running "$(clangformatexe)" exit endif // Replace selected text with $(srcfiletmp) sel_loadfrom "$(srcfiletmp)" // Delete $(srcfiletmp) file cmd.exe /c del "$(srcfiletmp)"
.clang-format
nach dem Starten des Skripts basierend auf dem ausgewählten Formatierungsstil, der in der
.clang-format
angegeben ist, die gewünschte Datei im
.clang-format
, überprüfen Sie das Änderungsdatum und
.clang-format
gegebenenfalls in ein temporäres Verzeichnis. Dort wird das ausgewählte Fragment des Quellcodes in die temporäre Datei kopiert, wonach
clang-format.exe
. Das formatierte Fragment wird zurück in das Notepad ++ - Fenster kopiert. Dann wird die temporäre Datei gelöscht.
In ClangFormat gibt es keine Möglichkeit, den Pfad zur Konfigurationsdatei im
.clang-format
anzugeben. ClangFormat sucht im Verzeichnis der formatierten Datei danach. Wenn es nicht gefunden wird, sucht es in den übergeordneten Verzeichnissen. Nachdem das Skript
.clang-format
verbleibt die Datei
.clang-format
im temporären Verzeichnis, um sie nicht bei jedem Start der Formatierung zu kopieren.
In allen Phasen des Skripts werden Fehler überprüft, und wenn sie auftreten, wird das NppExec-Konsolenfenster geöffnet, in dem eine Meldung angezeigt wird.
6. Fügen Sie in Notepad ++ einen neuen Menüpunkt hinzu, um das Skript auszuführen
Öffnen Sie
Plugins –> NppExec –> Advanced Options...
, wählen Sie in der Dropdown-Liste
Associated script
Plugins –> NppExec –> Advanced Options...
im
clang-format
und klicken Sie auf die Schaltfläche
Add/Modify
.
Wir starten Notepad ++ neu, woraufhin der Menüpunkt
Plugins –> NppExec –> clang-format
wird.

7. Konfigurieren Sie in Notepad ++ die Tastenkombination zum Ausführen des Skripts
Wir werden die Kombination
Ctrl + I
analog zu QtCreator verwenden. Öffnen Sie
Settings –> Shortcut Mapper
.
Standardmäßig ist die Kombination
Ctrl + I
besetzt, daher müssen Sie sie mit der Schaltfläche
Clear
auf der Registerkarte
Main Menu
freigeben (Zeile 38
Split Lines
in der aktuellen Version von Notepad ++).
Plugin commands
Registerkarte
Plugin commands
dem Skript im
clang-format
die Kombination
Ctrl + I
zu.
Fertig, wir können es benutzen!
Gebrauchsanweisung
Öffnen Sie die Quelldatei in Notepad ++, wählen Sie das gewünschte Fragment oder den gesamten Text aus und drücken Sie
Ctrl + I
Wenn nichts ausgewählt ist, wird die aktuelle Zeile formatiert.

Verwenden Sie zum Rückgängigmachen von Änderungen die Standard-Editor-Tools (
Ctrl + Z
).
Um die Formatierungsregeln zu ändern, bearbeiten Sie die Konfigurationsdateien im
<Notepad++>/plugins/NppExec/clang-format/
Verzeichnis
<Notepad++>/plugins/NppExec/clang-format/
Wenn Sie eine andere Version von ClangFormat verwenden müssen, ändern Sie den Pfad zur ausführbaren Datei im Skript
set clangformat = "\path\to\clang-format.exe"
Um einen anderen Formatierungsstil auszuwählen, drücken Sie
F6
und wählen Sie im Text des
clang-format
Skripts den gewünschten Stil aus, indem Sie eine der Zeilen auskommentieren
set style = STYLE_NAME
.
Alle notwendigen Dateien befinden sich im
Archiv .
Gute Formatierung!