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

32

Angenommen, ich habe einen Textblock wie diesen:

// 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 ist das Endergebnis

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

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

Tim
quelle
@Flimzy, leider nein. Von Zeit zu Zeit erscheinen Ihre Kommentare in Vim-Fragen, aber überprüfen Sie dies: meta.stackexchange.com/q/25925/160504
sidyll
Die bessere Community für diese Frage ist vi.stackexchange.com
thinwybk

Antworten:

36

Verwenden Sie den visuellen Blockmodus ( Ctrl+ v), um eine Reihe von Zeilen auszuwählen, dann entweder yoder dsie.

Dann, wenn Sie die foo ausgewählt, bar, baz Linien wieder visuelle Block - Modus verwenden , um 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 Erlernen der Positionierung kann ein wenig Übung erfordern, aber wenn Sie den Dreh raus haben, fliegen Sie. 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, aber wenn Sie Esc drücken, wird er auf magische Weise in allen ausgewählten Zeilen angezeigt). . In ähnlicher Weise macht Shift+ idasselbe am Anfang des ausgewählten Blocks in jeder Zeile.

Sie müssen die leeren Zeilen danach jedoch bereinigen.

Es gibt auch eine großartige Vimcasts-Episode , in der diese Techniken detaillierter gezeigt werden.

Actionshrimp
quelle
1
Ich finde diese Lösung zusammen mit :set ve=allsehr vielseitig. Ich persönlich benutze das UnconditionalPaste-Plugin ( vim.org/scripts/script.php?script_id=3355 ), da es meinen Bedürfnissen etwas besser entspricht.
Peter Rincker
1

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

TLP
quelle
0

Folgendes wird genau das tun, was Sie beschreiben:

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

Je nachdem , was Sie tatsächlich getan brauchen (wie zum Beispiel im Gegensatz), in der Praxis könnte es einfacher zu sein , den „// Comment1“ usw. Block (Block-Auswahl Ctrlv), Ruck ( y) gehen, bis zum Ende des Codes blockieren und einfügen.

Jeet
quelle