Nehmen wir an, ich bearbeite einen Python-Code in vim, der ungefähr so aussieht:
myobj.myfunc("Some string parameter that goes on and on and on and on and sometimes doesn't"
"split very"
"neatly over different lines so that"
"it is formatted attractively")
Ich würde es vorziehen, dies neu zu formatieren, damit es zu dem von textwidth
mir festgelegten Wert passt :
myobj.myfunc("Some string parameter that goes on and on and "
"on and on and sometimes doesn't split very "
"neatly over different lines so that it is "
"formatted attractively")
Gibt es eine einfache Möglichkeit, dies zu tun? Wäre dies ein herkömmlicher gqipTextabsatz oder ähnliches, wäre dies nützlich, würde jedoch nicht die Anführungszeichen verarbeiten, die zum Abgrenzen der Zeichenfolge verwendet werden.
Hinweis : Ich frage hier speziell nach Python, aber im Idealfall ist diese Antwort für viele Arten von Programmiersprachen relevant, die die Fortsetzung von Zeichenfolgen ermöglichen.
formatting
line-breaks
filetype-python
Andrew Ferrier
quelle
quelle
"""multi-line string"""
?Antworten:
Oh, das ist eine schwierige Frage. Ich denke, der beste Ansatz ist möglicherweise ein Makro, aber wahrscheinlicher ein Plugin. Hier ist ein Beispiel, das ich ausgepeitscht habe (ich brauche ein besseres Hobby). Es schien für mich zu funktionieren, würde aber das Python-Einrückungs-Plugin benötigen, um richtig einzurücken. Versuch es.
Dann könnten Sie es mit
:call ReformatMultiLines()
und / oder in einem Mapping verwenden.quelle
Wenn dies regelmäßig vorkommt, sollten Sie am besten nach einem Plugin suchen oder die Funktion von @Sukima verwenden. Wenn ich dies jedoch im laufenden Betrieb tun würde, würde ich wahrscheinlich Folgendes tun:
Fügen Sie nach dem öffnenden und vor dem schließenden Paren eine neue Zeile ein, sodass sich die Zeichenfolgen in separaten Zeilen befinden.
Wählen Sie Zeilen mit Zeichenfolgen aus und löschen Sie umgebende Anführungszeichen:
:norm ^x$x
:set tw-=2
gvgq
:set tw+=2
gv:norm I"<Esc>A"
. Stattdessen<Esc>
möchten Sie ein Escape-Zeichen einfügen, indem Sie Strg-V gefolgt von der Escape-Taste eingeben. Da ich jj zu Flucht zuordnen, gebe ich hier normalerweise nur jj ein.quelle
:set tw-=2
Ergebnis istE487: Argument must be positive: tw-=2
. Ist die Syntax falsch?:set tw?
. Ich vermute, Sie haben die Textbreite auf 0 gesetzt. Bei diesen Schritten wird davon ausgegangen, dass die Textbreite mit der Anzahl der Zeichen beginnt, die Sie pro Zeile benötigen.s/2/3/
ein Leerzeichen vor dem abschließenden Anführungszeichen einfügen, da Ihre lange Zeichenfolge nicht den richtigen Abstand zwischen den Wörtern aufweist.Das Parsen und Formatieren von Code ist schwierig, insbesondere für dynamische Sprachen wie Python.
Anstatt zu versuchen, Python in Vimscript zu analysieren, empfehle ich Ihnen, einen externen Formatierer wie yapf zu verwenden . Mit meiner Antwort hier kannst du dies automatisch aufschreiben mit:
Die
s:write_cmd()
Funktion steht in der anderen Antwort - ich werde sie hier nicht hinzufügen, so dass ich sie nicht an zwei Stellen aktualisieren muss, wenn ich einen Fehler finde :-)Sie können auch einstellen ,
formatprg
umyapf
es manuell formatieren mitgq
.quelle
yapf
anscheinend nicht zutrifft . Trotzdem stimme ich zu, es sieht nach einem nützlichen Werkzeug aus.Die folgenden Funktionen und entsprechenden Zuordnungen haben dieses Problem für mich gelöst:
quelle