Jak dołączyć do co drugiej linii w Vimie?


28

Chciałbym dołączyć wiele (~ 1000) linii, ale tylko co dziwne z następną. Ręcznie mogłem zrobić

Jj

500 razy i zrób to. Jak jednak wykonać te dwie instrukcje 500 razy w jednym poleceniu? Pisanie na maszynie

500Jj

dołączy do następnych 500 linii, a następnie przejdzie w dół o jedną linię.

Przykład:

Mam:

a
b
c
d
e
f
g
h

Chcę:

a b
c d
e f
g h

Edycja: Próbowałem mapowania:

:map X Jj
500X

ale najwyraźniej powinienem ponownie przeczytać dokumentację dotyczącą mapowania. Nie działa

Odpowiedzi:


30

zrobiłbym to:

  1. rozpocznij rejestrowanie makra „q”: qqJjq

  2. powtórz makro „q” 500 razy: 500@q

(w rzeczywistości nie jest to makro o nazwie „q”, jest to nazwany rejestr o nazwie „q”. zamiast interaktywnie wypełniać ten rejestr jak w 1., możesz również zrobić, :let @q = "Jj"a następnie zrobić 2.)


Fajnie, dziękuję za zapamiętanie makr dla mnie!
Boldewyn

:% normalnego J było bardzo szybkie i łatwe (patrz 2. najlepsze rozwiązanie poniżej) ... w porównaniu do tego rozwiązania makr działającego na ponad 50 000 linii
ihightower 14.07.16

@hightower, dlatego też głosowałem za tą odpowiedzią. 6 lat temu :)
akira

@akira twoje makro właśnie uratowało mi dzień, ponieważ potrzebowałem właśnie tego rozwiązania makr do innych celów.
ihightower

24

Aby to zrobić w każdej linii pliku:

:%normal J

lub krócej:

:%norm J

Aby to zrobić tylko na części pliku, zaznacz linie za pomocą Vlub uzyskaj zakres w inny sposób:

:'<,'>global/^/normal J

lub krócej:

:'<,'>g/^/norm J

Kevin chce uruchomić dwa polecenia na każdym pliku, nie tylko jedno.
JNK

1
wykorzystanie :godpowiedzi wymaga PO.
Luc Hermitte

2
To rzeczywiście dołączy co drugą linię. Spróbuj!
Kevin Panko

Dzięki za globalpodstęp. W moim przypadku nagrywanie makra było łatwiejsze i szybsze.
Boldewyn

2
Tylko zgadnij - wykonuje polecenie na każdej linii w kolejności, a po wykonaniu pierwszej linii druga linia już nie ma (została połączona z pierwszą linią), więc jest zmuszona przejść do trzeciej linii.
Kevin Panko

9

A co z tym:

:g/$/j  

lub

:g/$/j!  

i grupuj co trzy linie

:g/$/j3 

1
To BARDZO fajne rozwiązanie Miro. Jest to nawet lepsze, ponieważ możesz użyć tego również w standardowym vi, chociaż, co dziwne, kiedy używasz końcowej liczby w SVR4.0 vi (jak w Solarisie) zamiast j3 tworząc 3 kolumny, to 4. (więc musisz użyć j2 do grupowania co 3 linie)
JohnGH


-1

Nie jestem użytkownikiem Vima, ale sprawdzam, jak wygląda dokumentacja online

500(Jj) 

może działać, ponieważ analizuje elementy wewnątrz nawiasów jako jednostkę.


Hm, dzięki za próbę, ale w mojej wersji Vim po prostu ignoruje nawiasy. Czy możesz mi powiedzieć link, w którym znalazłeś tę składnię?
Boldewyn

1
vimdoc.sourceforge.net/htmldoc/syntax.html - Przepraszamy, to nie pomogło!
JNK

Właściwie sprawdź ten link: vim.org/scripts/script.php?script_id=2136 i sprawdź, czy to spełni twoje oczekiwania.
JNK
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.