Manchmal möchte ich einen bestimmten visuellen Textblock mehrzeilig bearbeiten.
Zum Beispiel würde ich einen Text nehmen, der so aussieht:
name
comment
phone
email
Und lass es so aussehen
vendor_name
vendor_comment
vendor_phone
vendor_email
Derzeit ist die Art, wie ich es jetzt tun würde, ...
" vendor_"
ohne Anführungszeichen ein. Beachten Sie den zusätzlichen Platz, den wir zurücklegen mussten.Ich muss nicht einrücken, wenn vor den Wörtern mindestens eine Leerzeichenspalte steht. Ich würde das Leerzeichen nicht brauchen, wenn ich nicht den Sichtblock mit löschen müsste c.
Aber wenn ich mich klären muss, gibt es dann eine Möglichkeit, das zu tun, was ich oben ausgeführt habe, ohne das erforderliche Leerzeichen mit Einrückung zu erstellen?
Warum funktioniert das gleichzeitige Bearbeiten mehrerer Zeilen nur, wenn der Einfügemodus mit beendet wird? esc Über ctrlc?
Bearbeiten:
Hier ist ein komplizierteres Beispiel
name = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone = models.CharField( max_length = 135, blank = True )
email = models.EmailField( blank = True )
zu
name = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone = models.whatever.CharField( max_length = 135, blank = True )
email = models.whatever.EmailField( blank = True )
in diesem Beispiel würde ich den vertikalen visuellen Block über dem .
ausführen und ihn dann im Einfügemodus erneut einfügen, dh .whatever.
eingeben. Hoffentlich sehen Sie jetzt den Nachteil dieser Methode. Ich kann nur eine Textspalte auswählen die in vertikaler Position alle gleich sind.
n
in name
name__.I
name__ (Hauptstadt i).vendor_
ein.Ein Großbuchstabe I
muss anstelle eines Kleinbuchstaben i
verwendet werden, da der Kleinbuchstabe i
als Beginn eines Textobjekt interpretiert wird, was für sich genommen ziemlich nützlich ist, z. zur Auswahl eines innerhalb eines Variablenblocks ( it
NAME _ ):
Ein anderer Ansatz ist die Verwendung des . Befehl (dot
) in Kombination mit I.
vendor_
).Ich finde, diese Technik ist oft schneller als der visuelle Block-Modus für eine kleine Anzahl von Zusätzen und hat den zusätzlichen Vorteil, dass Sie den Text einfach überspringen können, wenn Sie ihn nicht in jede einzelne Zeile eines Bereichs einfügen müssen j's.
Beachten Sie, dass bei einer großen Anzahl von zusammenhängenden Hinzufügungen der Blockansatz oder das Makro wahrscheinlich überlegen sind.
Drücken Sie:
Geben Sie den neuen Text ein.
Ich würde ein Makro verwenden, um meine Aktionen aufzuzeichnen, und es dann wiederholen.
qq
, um die Aufnahme in den q
-Puffer zu starten.i
, um in den Einfügemodus zu wechseln, und geben Sie vector_
ein. Drücken Sie dann ESC
, um den Einfügemodus zu verlassen.0
, um zum Anfang der Zeile zurückzukehren.j
drücken, um runterzugehen.q
, um die Aufnahme zu beenden.Sie haben jetzt ein Nice-Makro.
Geben Sie [email protected]
ein, um das Makro dreimal auszuführen, um die restlichen Zeilen auszuführen.
:%s/^/vendor_/
oder fehlt mir etwas?
Aktualisiert Januar 2016
Während die akzeptierte Antwort eine großartige Lösung ist, ist dies tatsächlich etwas weniger Tastenanschläge und skaliert im Prinzip besser, basierend auf der akzeptierten Antwort.
n
in name
.I
.vendor_
ein.Beachten Sie, dass dies weniger Tastatureingaben erfordert als die akzeptierte Antwort (vergleiche Schritt 3). Wir zählen nur die Anzahl der auszuführenden Aktionen.
Wenn Sie Zeilennummern aktiviert haben (wie oben dargestellt) und die Zeilennummer kennen, zu der Sie wechseln möchten, können Sie Schritt 3 in # ändern.G Dabei ist # die gewünschte Zeilennummer.
In unserem obigen Beispiel wäre dies 4G. Bei nur wenigen Zeilennummern funktioniert eine explizite Zählung jedoch gut.
Möglicherweise haben Sie auch einen Anwendungsfall, bei dem Sie einen Textblock löschen und ersetzen möchten.
So was
Hello World
Hello World
Zu
Hello Cool
Hello Cool
Sie können nur visuell "Welt" in beiden Zeilen auswählen.
Geben Sie zum Ändern c ein. Jetzt befinden Sie sich im Einfügemodus.
Legen Sie die gewünschten Sachen ein und drücken Sie die Escape-Taste.
Beide werden vertikal reflektiert. Es funktioniert genau wie 'ich', außer dass es den Block durch den neuen Text ersetzt, anstatt ihn einzufügen.
Angenommen, Sie haben diese Datei:
something
name
comment
phone
email
somethine else
and more ...
Sie möchten "vendor_" vor "name", "comment", "phone" und "email" hinzufügen, unabhängig davon, wo sie in der Datei erscheinen.
:%s/\<\(name\|comment\|phone\|email\)\>/vendor_\1/gc
Das Flag c
fordert Sie zur Bestätigung auf. Sie können das löschen, wenn Sie die Aufforderung nicht möchten.
Ich wollte ein lot Zeilen in einer Konfigurationsdatei auf einem Server auswerten, die nur über vi (kein Nano) verfügte. Die visuelle Methode war ebenfalls umständlich So habe ich das gemacht.
vi file
öffnen:set number!
oder :set number
:35,77s/^/#/
Hinweis: Die Zahlen sind inklusive, Zeilen von 35 bis 77, beide werden geändert.
Um das zu kommentieren/rückgängig zu machen, benutze einfach :35,77s/^#//
Wenn Sie nach jeder Codezeile ein Text-Word als Kommentar hinzufügen möchten, können Sie auch Folgendes verwenden:
:35,77s/$/#test/
(für Sprachen wie Python)
:35,77s/;$/;\/\/test/
(für Sprachen wie Java)
credits/Referenzen:
Dies ist eine alte Frage, aber ich möchte eine Alternative anbieten, die flexibler sein kann:
Beispiel: Um den Text XYZ am Anfang der Zeile einzugeben
:%norm IXYZ
Was passiert hier?
%
== Ausführung in jeder Zeilenorm
== Führen Sie die folgenden Tasten im normalen Modus ausI
== Am Zeilenanfang einfügenXYZ
== Der Text, den Sie eingeben möchtenDann drückst du die Eingabetaste und es wird ausgeführt.
Spezifisch für Ihre Anfrage:
:%norm Ivendor_
Sie können auch einen bestimmten Bereich auswählen:
:2,4norm Ivendor_
Oder über einen ausgewählten Sichtbereich ausführen:
:'<,'>norm Ivendor_
Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line
1. ctrl + v to go to visual block
2. select the lines using up and down arrow
3. enter small 3i ( presess SMALL I three times)
4. I (Press capital I, That will take you into insert mode)
4. Write the text you want to add
5. esc
6. press down arrow