Vim: jak wkleić blok tekstu na końcu wielu wierszy?

32

Powiedz, że mam taki blok tekstu:

// Komentarz 1
// Komentarz 2
// Komentarz 3

I chcę dołączyć każdą z tych linii na końcu 3 odpowiednich linii kodu:

foo = 1;
bar = 2;
baz = 3;

Tak więc wynik końcowy jest

foo = 1; // Komentarz 1
bar = 2; // Komentarz 2
baz = 3; // Komentarz 3

Czy jest łatwy sposób to zrobić w Vimie?

Tim
źródło
@Flimzy, niestety nie. Od czasu do czasu komentarze takie jak twoje pojawiają się w pytaniach Vima, ale sprawdź to: meta.stackexchange.com/q/25925/160504
sidyll
Lepszą społecznością dla tego pytania jest vi.stackexchange.com
thinwybk

Odpowiedzi:

36

Używać trybu blokowego wizualnej ( Ctrl+ v), aby wybrać jeden zestaw linii, wówczas yalbo dim.

Następnie, jeśli wybrałeś linie foo, bar, baz, ponownie użyj trybu blokowania wizualnego, aby wybrać pierwszą kolumnę linii komentarzy, a następnie Shift+ pje w odpowiednie miejsce (lub jeśli wybrałeś linie komentarzy, wybierz ostatnią kolumnę baz foo bar linie i pje na swoim miejscu.

Poznanie pozycjonowania może wymagać trochę praktyki, ale kiedy masz talent, będziesz latał. Po zaznaczeniu bloku możesz również użyć Shift+, Aaby dodać np. Spacje do bloku (podczas dodawania nowy tekst pojawi się tylko w górnym wierszu, ale po naciśnięciu klawisza Esc magicznie pojawi się we wszystkich wybranych wierszach) . Podobnie, Shift+ izrobi to samo na początku wybranego bloku w każdej linii.

Musisz jednak później wyczyścić puste linie.

Jest też świetny odcinek vimcastów pokazujący te techniki bardziej szczegółowo.

actionhrimp
źródło
1
Uważam, że to rozwiązanie :set ve=alljest bardzo wszechstronne. Ja osobiście korzystam z wtyczki UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ), ponieważ jest ona nieco lepiej dostosowana do moich potrzeb.
Peter Rincker
1

Cóż, jeśli jest to łatwe, czy nie, powiedz mi. Przejdź do // Comment 1, kliknij, ddaby usunąć. Przejdź do linii za pomocą foo = 1;i naciśnij p, aby wkleić poniżej linii. Przejdź w górę do fooponownie i naciśnij, Jaby dołączyć do rzędu. Tada

TLP
źródło
0

Następujące czynności zrobią dokładnie to, co opisujesz:

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

W zależności od tego, co faktycznie musisz zrobić (w przeciwieństwie do przykładu), w praktyce może być łatwiejsze wybranie bloku „// Comment1” itd. Block ( Ctrlv), yank ( y), przejdź na koniec kodu blokuj i wklej.

Jeet
źródło