ClangFormat und Notepad ++ Integration

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.org

2. 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.

Bild

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.

Bild

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!

Source: https://habr.com/ru/post/de457972/


All Articles