Antworten:
Mit dem Befehl können Sie einfach jedes aufeinanderfolgende Leerzeichen in der Zeile durch eine neue Zeile ersetzen :s/\s\+/\r/g
. \s\+
bedeutet ein oder mehrere Leerzeichen und \r
ist eine neue Zeile, siehe :help :substitute
und :help regexp
für Details. Wenn Sie den Befehl in einer Zeile wie der folgenden ausführen:
foo bar baz
Du erhältst:
foo
bar
baz
Wenn Sie hlsearch
aktiviert haben und Ihren Bildschirm nicht überall mit hervorgehobenen Leerzeichen überladen möchten, können Sie eine kleine Funktion wie die folgende schreiben, um dies zu vermeiden:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, sehen Sie :help s/\r
. Es könnte durch eine wörtliche Newline-Eingabe ersetzt werden <c-v><cr>
. In diesem Zusammenhang \n
ist ein Nullzeichen, siehe :help s/\n
.
replaces the content of the register
- welches Register?
Die Verwendung vim
der Substitution ist wahrscheinlich eine der besseren Möglichkeiten, um Ihre Aufgabe zu erfüllen, aber Sie können auch ein Makro verwenden. Angenommen, wir haben die folgenden Daten, wobei sich der Cursor irgendwo in Zeile 1 befindet:
1 a b c d e f
~
Wenn Sie im normalen Modus qqstarten , wird durch Drücken ein Makro aufgezeichnet, das über aufgerufen werden kann @q. Alles, was danach eingegeben qqwird, kann über den oben genannten Anruf wiederholt werden. Unser Ziel ist es, normale Befehle aufzuzeichnen, die allgemein genug sind, um eine nahtlose Wiederholung zu ermöglichen.
Daher können wir eingeben 0, um den Cursor an den Anfang der Zeile zu bringen und dann fspaceden Cursor an die erste Stelle zu bewegen. Dies ermöglicht es uns, dann zu tippen renter, was zu Folgendem führt:
1 a
2 b c d e f
~
qJetzt zu schlagen ist eine gute Idee, da unser wiederverwendbares Makro zur Wiederholung bereit ist. Etwas willkürlich stellen wir fest, dass noch 4 Leerzeichen durch Zeilenumbrüche zu ersetzen sind. Wenn 4@qwir also drücken, wiederholen wir das q
Makro viermal, was zu Folgendem führt:
1 a
2 b
3 c
4 d
5 e
6 f
~
Beachten Sie, dass es aufgrund der Art und Weise, wie wir das Makro eingerichtet haben, sicher gewesen wäre, den Befehl über 9000 Mal zu wiederholen, da dies nur die aktuelle Zeile betrifft und da rechts von der letzten Dateneingabe keine Leerzeichen vorhanden fspacesind 'schön' scheitern und verhindern, dass Daten durch Zeilenumbrüche ersetzt werden.
Also von Anfang an wiederholen:
qq0fspacerenterq9001@q
liefert unser Ergebnis.
9001
Taste auf Ihrer Tastatur haben, mit der Sie Ihren Benutzernamen schnell eingeben können.
Der einfachste Weg, Linien in Vim zu teilen, ist der Befehl für den normalen Modus gq
(geben Sie beide Buchstaben im normalen oder visuellen Modus schnell hintereinander ein).
Im visuellen Modus wird alles geteilt, was ausgewählt ist. Im normalen Modus folgen Sie gq
einer Bewegung.
Teilt beispielsweise gql
eine Zeile auf die aktuell eingestellte Breite. Um die Breite der geteilten Linien so einzustellen, dass sie sich von Ihrer aktuellen Einstellung unterscheidet, können Sie verwenden :set textwidth=n
, wobei n
die Anzahl der Zeichen in einer Zeile angegeben wird, z. B., 10
und nach Abschluss wieder auf Ihre normale Breite zurückkehren.
Ich habe diese Informationen aus einem Youtube- Video von Kholidfu erhalten, das zeigt, wie man Linien im normalen Modus mit einer Bewegung verbindet und teilt.