Vim: Wie füge ich einen Textblock am Ende mehrerer Zeilen ein?

17018
Tim

Angenommen, ich habe einen Textblock wie folgt:

// Kommentar1 // Kommentar2 // Kommentar3 

Und ich möchte jede dieser Zeilen an das Ende von 3 entsprechenden Codezeilen anhängen:

foo = 1; bar = 2; Baz = 3; 

Damit das Endergebnis ist

foo = 1; // Kommentar1 bar = 2; // Kommentar2 Baz = 3; // Kommentar3 

Gibt es eine einfache Möglichkeit, dies in Vim zu tun?

26
@Flimzy, leider nein. Von Zeit zu Zeit werden Kommentare wie Ihre in Vim-Fragen angezeigt. Überprüfen Sie jedoch Folgendes: http://meta.stackexchange.com/q/25925/160504 sidyll vor 12 Jahren 0
Die bessere Community für diese Frage ist https://vi.stackexchange.com/ thinwybk vor 5 Jahren 0

3 Antworten auf die Frage

30
actionshrimp

Verwenden Sie den Sichtblockmodus ( Ctrl+ v), um einen Satz von Linien auszuwählen, dann entweder eine yoder dmehrere Linien .

Dann, wenn Sie die foo ausgewählt, bar, baz Linien verwenden optische Block - Modus wieder die erste Spalte der Kommentarzeilen zu markieren, und dann Shift+ psie in Platz (oder, wenn Sie die Kommentarzeilen ausgewählt, wählen Sie die letzte Spalte der foo bar baz Linien und psie an Ort und Stelle.

Das Positionieren der Position zu erlernen mag etwas Übung erfordern, aber wenn Sie den Kniffel haben, werden Sie fliegen. Wenn Sie einen Block ausgewählt haben, können Sie auch Shift+ verwenden A, um z. B. Leerzeichen an den Block anzuhängen (beim Anhängen wird der neue Text nur in der obersten Zeile angezeigt. Wenn Sie jedoch auf esc drücken, erscheint er magisch in allen ausgewählten Zeilen.) . In gleicher Weise macht Shift+ idas Gleiche am Anfang des ausgewählten Blocks in jeder Zeile.

Sie müssen die leeren Zeilen danach jedoch aufräumen.

Es gibt auch eine großartige Vimcast-Episode, in der diese Techniken ausführlicher dargestellt werden.

Ich finde diese Lösung zusammen mit `: set ve = all` sehr vielseitig. Ich persönlich benutze das UnconditionalPaste-Plugin (http://www.vim.org/scripts/script.php?script_id=3355), da es meinem Bedarf etwas besser entspricht. Peter Rincker vor 12 Jahren 1
1
TLP

Nun, wenn es einfach ist oder nicht, sagst du es mir. Navigieren Sie zu // Comment 1und drücken Sie ddzum Löschen. Navigieren Sie zu der Zeile mit foo = 1;und drücken Sie p, um sie unterhalb der Zeile einzufügen. Gehen Sie foowieder zu und drücken Sie J, um sich der Reihe anzuschließen. Tada

0
Jeet

Folgendes wird genau das tun, was Sie beschreiben:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@ 

Abhängig von dem, was Sie tatsächlich tun müssen (im Gegensatz zum Beispiel), ist es in der Praxis möglicherweise einfacher, den "// Comment1" -Block ( Ctrlv), Block ( ), Yank ( y) und das Ende des Codes zu wählen blockieren und einfügen