Wenn ich Code aus einer anderen Datei kopiere, wird die Formatierung wie folgt durcheinander gebracht:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Wie kann ich diesen Code in vim automatisch formatieren?
Wenn ich Code aus einer anderen Datei kopiere, wird die Formatierung wie folgt durcheinander gebracht:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Wie kann ich diesen Code in vim automatisch formatieren?
Antworten:
Versuchen Sie die folgenden Tastenanschläge:
gg=G
Erläuterung: gg
Geht an den Anfang der Datei, =
ist ein Befehl zum Korrigieren des Einrückens und G
weist ihn an, den Vorgang bis zum Ende der Datei auszuführen.
Ich benutze gerne das Programm Artistic Style. Laut ihrer Website :
Artistic Style ist ein Quellcode-Indenter, Formatierer und Verschönerer für die Programmiersprachen C, C ++, C # und Java.
Es läuft unter Windows, Linux und Mac. Es wird Dinge wie Einrücken, Ersetzen von Tabulatoren durch Leerzeichen oder umgekehrt, Platzieren von Leerzeichen um Operationen, wie Sie möchten (Konvertieren if(x<2)
in, wenn ( x<2 )
es Ihnen gefällt), Klammern in derselben Zeile wie Funktionsdefinitionen oder Verschieben in die Zeile unten usw. Alle Optionen werden über Befehlszeilenparameter gesteuert.
Um es in vim zu verwenden, setzen Sie einfach die Option formatprg darauf und verwenden Sie dann den Befehl gq. So habe ich zum Beispiel in meiner .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
Wenn ich eine CPP-Datei öffne, wird formatprg mit den gewünschten Optionen festgelegt. Dann kann ich gg eingeben, um an den Anfang der Datei zu gelangen und gqGdie gesamte Datei gemäß meinen Standards zu formatieren. Wenn ich nur eine einzelne Funktion neu formatieren muss, kann ich zum Anfang der Funktion gehen, dann tippen gq][und es wird nur diese Funktion neu formatieren.
Die Optionen, die ich für Astyle habe -T4pb
, sind nur meine Vorlieben. Sie können die Dokumente durchsehen und die Optionen ändern, damit der Code nach Ihren Wünschen formatiert wird.
Hier ist eine Demo. Vor dem Astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Nach Astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Hoffentlich hilft das.
Der eingebaute Befehl zum korrekten Einrücken des Codes wurde bereits erwähnt ( gg=G
). Wenn Sie den Code verschönern möchten , müssen Sie eine externe Anwendung wie Einzug verwenden . Da %
die aktuelle Datei im Ex-Modus bezeichnet wird, können Sie sie folgendermaßen verwenden:
:!indent %
Mit dem Plugin vim-autoformat können Sie Ihren Puffer (oder Ihre Pufferauswahl) mit einem einzigen Befehl formatieren: https://github.com/Chiel92/vim-autoformat . Dafür werden externe Formatprogramme verwendet, wobei auf die Einrückungsfunktionalität von vim zurückgegriffen wird.
Ich finde das clang-format
funktioniert gut.
In der Clang-Dokumentation finden Sie einige Beispiel-Tastenkombinationen
Ich bevorzuge die equalprg
Bindung in vim. Auf diese Weise können Sie clang-format
mit G=gg
oder anderen =
Einrückungsoptionen aufrufen .
Fügen Sie einfach Folgendes in Ihre .vimrc-Datei ein:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Ich mag indent
wie oben erwähnt, aber meistens möchte ich nur einen kleinen Abschnitt der Datei formatieren, an der ich arbeite. Da indent
kann Code von stdin nehmen, ist es wirklich einfach:
:!indent
.astyle
nimmt auch stdin, so dass Sie dort den gleichen Trick anwenden können.
Ich wollte hinzufügen, dass Sie :set paste
vor dem Einfügen tippen können, um zu verhindern, dass es an erster Stelle durcheinander kommt . Nach dem Einfügen können Sie :set nopaste
eingeben, dass Dinge wie js-Verschönern und Einrücken wieder funktionieren.
:set paste!
dafür, was den Einfügewert umschaltet, anstatt ihn einzustellen. Dies erleichtert das Ausschalten, da Sie einfach einige Befehle zurückblättern und die Eingabetaste drücken können.