Ich mag die Smart-Indent-Funktion von Vim, mit der ich gut eingerückte Codeblöcke erstellen kann.
Ich kopiere / füge regelmäßig Code in die Puffer ein, aber dieser Code ist oft schlecht formatiert.
Ideal wäre es, den Code über das Smart-Indent-System erneut zu verarbeiten.
Ist so etwas möglich?
Wie würden Sie beispielsweise den folgenden Code "reparieren" (einen Auszug aus einem größeren Block - ich möchte nicht jede Zeile manuell reparieren ...):
else
{
m[c] = 5;
Finished = true;
std::cout<<"(ID,R,E)"<<"-->"<<"("<<g[c]<<","<<r[c]<<","<<E1 <<")"<< std::endl;
std::cout << "\n"<<"finish-->" << r[c] << "\t" <<"E1-->"<< E1 <<"\n" ;
}
}
indentation
ide
rolfl
quelle
quelle
Antworten:
Ich mache dies auf zwei Arten.
Einzug angepasste Paste
Erstens, wenn der Code im Puffer formatiert ist, aber auf einer anderen Einrückungsebene, verwende ich
]p
stattdessenp
, was den Code so einfügt, aber mit der Einrückung, die so verschoben ist, dass die erste eingefügte Zeile dieselbe Tiefe hat wie die Zeile I bin aufEG-Quelle in den Puffer kopiert
ZB Ergebnis des Einfügens mit
]p
vim setzt das while auf die gleiche Einrückungsstufe wie
int i
. Dies geht schnell, funktioniert jedoch nur, wenn der kopierte Code ordnungsgemäß in sich eingerückt ist.Nach dem Einfügen neu formatieren
Der
=
Operator in vim formatiert den Code basierend auf den konfigurierten Formatierungsregeln neu. Für kurze Einfügeausschnitte gehe ich in den visuellen Modus mitv
, wähle die gerade eingefügten Zeilen aus und drücke dann, um sie neu=
zu formatieren.Bei größeren Pasten nutze ich die Tatsache, dass der Cursor auf die erste eingefügte Zeile zeigt und vim so etwas wie "84 weitere Zeilen" sagt. Ich kann dann eingeben,
84==
um diese 84 Zeilen umzufließen (natürlich 84 durch die Anzahl der Zeilen ersetzen, die Sie tatsächlich einfügen).Verweise
:help ]p
für angepasste Einzugspaste:help =
Abdeckungen={motion}
,[count]==
und{Visual}=
für durch individuelle Filterung oder builtin indent Regelnquelle
Der
=
Befehl kann zum erneuten Einrücken verwendet werden.Wie die meisten Befehle im normalen Modus kann sie auf eine Bewegung angewendet werden, sodass Sie den gerade eingefügten Code mit erneut einfügen können =']. Dies wechselt von der aktuellen Cursorposition zur
']
Marke, der letzten Zeile der Paste.=
kann auch im visuellen Modus verwendet werden.Ein weiterer nützlicher Befehl ist ]p, der auf derselben Einzugsebene wie die aktuelle Zeile eingefügt wird. Dies kann dazu beitragen, ordnungsgemäß eingerückten Text in einer anderen Einrückungstiefe entsprechend dem umgebenden Text einzufügen.
quelle
Bei Verwendung von =ap (Mnemonik ist "Absatz formatieren") wird versucht, den aktuellen Absatz automatisch zu formatieren.
Wenn Sie sorgfältig darauf achten möchten, was Sie möglicherweise neu formatieren, ist es möglicherweise vernünftiger und schneller vap, den aktuellen Absatz visuell auszuwählen (was Ihnen einen visuellen Hinweis darauf gibt, was neu formatiert wird), gefolgt von =. Ich finde dies nützlich in Dateien, bei denen ich weiß, dass vim falsch formatiert wird, und ich möchte nicht versehentlich andere Zeilen falsch formatieren.
quelle
Verwenden Sie zum erneuten Einfügen einer Datei, die sich bereits im Puffer befindet
gg=G
: Siehe Einrückung korrigierenZum erneuten Einfügen eines Teils einer Datei können verschiedene Begrenzungen auf den
=
Filter angewendet werden (z. B. wird==
nur die aktuelle Zeile korrigiert ).Damit der Einzug beim Einfügen von Text unverändert
:set paste
bleibt, bevor Sie Text in den Puffer einfügen, verhindert dies, dass vim gerade eingefügten Text automatisch einrückt. Nach dem Einfügen können Sie zurückgehen und verwenden,set :nopaste
wenn Sie fertig sind. Siehe vimdoc hier .Wenn Sie feststellen, dass Sie häufig etwas einfügen , ist es eine gute Idee, diesen Tipp im VimWiki zu verwenden und eine Taste zum Umschalten des Einfügemodus einzurichten, indem Sie die folgenden Zeilen zu Ihrem hinzufügen
.vimrc
:Sie können dann drücken,
<F2>
um den Einfügemodus umzuschalten. vim zeigt die Wörter "PASTE" in der Statuszeile an, wenn der Einfügemodus aktiv ist.quelle
gg=G
, um die gesamte Datei erneut einzuspeisen.gg=G
Dann schau dir die Teile an,vim
die falsch sind.astyle
Sie es beim Speichern eines Puffers tun. Einzelheiten finden Sie in dieser Frage zu SO.Wenn Sie den gesamten Block eines Blocks mit Klammern oder Klammern automatisch neu einrücken möchten, platzieren Sie den Cursor in derselben Zeile, in der sich eine Klammer befindet, und versuchen Sie es =%. Um Ihre Schichtbreite zu ändern, verwenden Sie z
:set sw=2
.Wenn dies nicht wie erwartet funktioniert , versuchen Sie es <%mit .(falls erforderlich) , um den Einzug manuell zu verringern ( Auszug ). Verwenden Sie >%für das Gegenteil.
Damit:
wird:
Um für einen bestimmten Code eine oder mehrere Zeilen automatisch einzuziehen, versuchen Sie Folgendes:
Versuchen Sie Folgendes, um den Einzug für eine oder mehrere Zeilen manuell zu vergrößern / zu verkleinern:
Sie können die Einrückung auch im visuellen Modus ( v) ausführen, indem Sie Text auswählen und =(Auto-Indent), <(De-Indent) oder >(Indent) drücken .
Ein weiterer Trick ist , um eine korrekte Vertiefung der gesamten Datei durch: gg=G.
Wenn Sie Tabulatoren anstelle von Leerzeichen verwenden, verwenden Sie:,
:retab
wodurch alle Tabulatoren durch Leerzeichen ersetzt werden (siehe: So ersetzen Sie Tabulatoren durch Leerzeichen? ).Für externe Methoden können Sie versuchen:
pythonTidy zum Neuformatieren von Python-Code, zB:
Verbunden:
quelle
Ich habe kürzlich vim-pasta ( https://github.com/sickill/vim-pasta ) installiert , und das scheint die Einrückung von Code beim Einfügen zu verbessern. Die README-Datei enthält auch einige gute Diskussionen zu verschiedenen Strategien zum Einfügen von Code.
quelle
In den vorhandenen Antworten wird bereits vieles behandelt. Ich möchte nur eine Zuordnung hinzufügen, die ich sehr oft zum Einrücken verwende.
Ich habe einige Vimrc gesehen, auf die dies abgebildet ist ===.
In beiden Fällen ist dies eine großartige Zuordnung, die ich fast immer verwende, insbesondere beim Einfügen von Code, der von einer anderen Stelle kopiert wurde.
Oder noch besser,
autocmd
fügen Sie dies so ein , dass Vim es einrückt, kurz bevor Sie die Änderungen auf die Festplatte schreiben.quelle