Angenommen, ich habe zehn Zeilen und möchte einem Wort, das in diesen Zeilen vorkommt, Text voranstellen. Es muss nicht am Anfang der Zeile stehen.
Von:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
zu:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
Ist es auch möglich, nicht nur prepend die bar(
aber eigentlich Surround foo
mit bar(foo)
?
Ich möchte auch eine schnelle Möglichkeit, //
Kommentare an mehrere Zeilen anzuhängen ( Kommentare im C-Stil).
Ich benutze Vim / GVim 7.2.
Antworten:
Gehen Sie zum ersten
foo
, drücken Sie Ctrl- v, um den visuellen Blockmodus aufzurufen, und drücken Sie, bis alle Zeilen mitfoo
markiert sind. Drücken Sie dann Shift- i, um am Anfang (des Blocks) einzufügen. Wenn Sie fertig sind und drücken Esc, werden die eingefügten Zeichen zu jeder Zeile links vom markierten Block hinzugefügt.Um am Ende einzufügen, drücken Sie erneut Ctrl- v, bewegen Sie sich nach oben / unten, um alle betroffenen Zeilen zu markieren, und drücken Sie dann Endoder $, um die Auswahl bis zum Ende der Zeilen zu erweitern. Jetzt können Sie drücken Shift- aam Ende aller Zeilen anhängen, wie zuvor mit Shift- i.
Die visuelle Auswahl kann auch mit normalen Bewegungsbefehlen erfolgen. Um einen ganzen Block in C zu kommentieren, können Sie zur öffnenden Klammer gehen und Ctrl- v % Shift- eingeben i // Esc.
quelle
i
, passiert nichts. Wenn ich drücke,shift+i
verschwindet die Auswahl, aber ich kann Text einfügen (an der aktuellen Stelle, an der sich nur der Cursor befindet).Um Ihre erste Frage zu beantworten, klicken Sie unten
wird nach
foo
dem passenden Muster suchen und es umgebenbar()
. Das/g
wird dies mehrmals in einer Zeile tun.Da Sie nur übereinstimmen
foo
, können Sie eine einfache machen:s/foo/bar(foo)/g
. Das Obige funktioniert jedoch, wenn Sie sich dafür entscheiden, einen regulären Ausdruck anstelle eines einfachen Wortes (zf[a-z][a-z]
. B. ) zu verwenden. Das '&' oben steht für das, was Sie gefunden haben.quelle
:
und dems
bestimmt, auf welchen Zeilen gearbeitet wird. Nichts bedeutet nur die aktuelle Zeile.1,30
bedeutet Zeilen 1 bis 30 (einschließlich).'<,'>
bedeutet die Linien in der aktuellen visuellen Auswahl.Um eine Reihe von Zeilen voranzustellen, verwende ich einen von zwei verschiedenen Ansätzen:
Ein Ansatz ist die Blockauswahl (von etw erwähnt). Im Allgemeinen können Sie einen rechteckigen Bereich auswählen, ctrl-Vgefolgt von einer Cursorbewegung. Wenn Sie ein Rechteck markiert haben, werden durch Drücken shift-IZeichen auf der linken Seite des Rechtecks shift-Aeingefügt oder auf der rechten Seite des Rechtecks angehängt. Mit dieser Technik können Sie also ein Rechteck erstellen, das die am weitesten links stehende Spalte der Zeilen enthält, die Sie voranstellen, drücken shift-I, das Präfix eingeben und dann die Escape- Taste drücken möchten .
Der andere Ansatz ist die Verwendung einer Substitution (wie von Brian Agnew erwähnt). Brians Ersetzung wirkt sich auf die gesamte Datei aus (das% im Befehl bedeutet "alle Zeilen"). Um nur wenige Zeilen zu beeinflussen, ist es am einfachsten, in shift-Vder ersten / letzten Zeile zu drücken (wodurch der visuelle Zeilenmodus aktiviert wird) und dann zur letzten / ersten Zeile zu wechseln. Geben Sie dann Folgendes ein:
Das ^ ist ein regulärer Ausdruck (in diesem Fall der Zeilenanfang). Wenn Sie dies im visuellen Linienmodus eingeben, wird '<,'> automatisch vor dem s eingefügt. Dies bedeutet, dass der Bereich der Substitution die visuelle Auswahl ist.
Zusätzlicher Tipp: Wenn Ihr Präfix Schrägstriche enthält, können Sie diese entweder mit einem umgekehrten Schrägstrich maskieren oder ein anderes Interpunktionszeichen als Trennzeichen im Befehl verwenden. Um beispielsweise C ++ - Zeilenkommentare hinzuzufügen, schreibe ich normalerweise:
Zum Hinzufügen eines Suffix ist der Substitutionsansatz im Allgemeinen einfacher, es sei denn, alle Ihre Zeilen haben genau die gleiche Länge. Verwenden Sie einfach $ für das Muster anstelle von ^ und Ihre Zeichenfolge wird angehängt anstatt vorangestellt.
Wenn Sie gleichzeitig ein Präfix und ein Suffix hinzufügen möchten, können Sie Folgendes tun:
Das. * Entspricht der gesamten Zeile. Das & in der Ersetzung setzt den übereinstimmenden Text (die gesamte Zeile) zurück, aber jetzt werden Ihr Präfix und Suffix hinzugefügt.
Übrigens: Wenn Sie Code auskommentieren, möchten Sie ihn wahrscheinlich später auskommentieren. Sie können Visual-Block ( ctrl-V) verwenden, um die Schrägstriche auszuwählen, und dann d drücken, um sie zu löschen, oder Sie können eine Substitution (wahrscheinlich mit einer visuellen Linienauswahl, erstellt mit shift-V) verwenden, um die führenden Schrägstriche wie folgt zu entfernen:
quelle
: normal zur Rettung!
: norm (al) spielt die Befehle so ab, als hätten Sie sie eingegeben:
Oder in einer Zeile:
Wenn Sie Windows ausführen, geben Sie ctrlqstatt ein ctrlv.
quelle
Eine weitere Möglichkeit (wahrscheinlich nicht so nützlich in Ihrem Testfall, aber praktisch in anderen Situationen) besteht darin, den Bereich, den Sie ändern möchten, mit Markierungen abzusperren.
:'a,'b s/foo/bar(&)/
Normalerweise mag ich den visuellen Blockmodus, wenn alles auf dem Bildschirm sichtbar ist, und ich bevorzuge normalerweise Markierungen, wenn Start und Stopp durch viele Bildschirme getrennt sind.
quelle
m
statt'
einen neuen Marker setzen.'
dient zum Springen zur Linie eines vorhandenen Markers.`
Springt zur Zeile und Spalte dieses Markers.Ein anderer einfacher regulärer Ausdruck ist:
quelle
Verwenden Sie für die Kommentare im C-Stil die Regexp-Antwort von Brian, stimmen Sie mit dem Zeilenende überein
$
und fügen Sie sie ein.quelle