Przenoszenie linii między podzielonymi oknami w vimie

2

Mam dwa pliki, powiedzmy a.txti b.txt, w tej samej sesji vima i podzielę ekran, więc mam plik a.txtw górnym i b.txtdolnym oknie.

Chcę przenosić linie tu i tam z miejsca a.txtna b.txt: wybieram linię za pomocą Shift+ v, następnie przechodzę do b.txtw dolnym oknie za pomocą Ctrl+ w , wklejam za pomocą p, wracam do za a.txtpomocą Ctrl+ w i mogę powtórzyć operację, gdy dojdę do innej linii I chcę się przenieść.

Moje pytanie: czy jest szybszy sposób powiedzieć vim „wysłać linię, w której jestem (lub wybrany test) do drugiego okna” ?

ćwiek
źródło
Używać qmakra? q[some_letter] [whatever operations] q, a następnie wywołaj makro za pomocą[times to be called]@q
Chong
Zakładam, że usuwasz linię, którą wybrałeś a.txt. Jeśli nie, wkleiłbyś coś innego b.txt. Jeśli tak, nie trzeba najpierw wybierać linii.
Anthony Geoghegan

Odpowiedzi:

5

To brzmi jak dobry przypadek użycia makra. Makra to polecenia, które można nagrywać i przechowywać w rejestrze Vima. Każdy rejestr jest oznaczony literą od a do z.

Nagranie

Z klawiszy nagrywania dla powtarzających się zadań - Vim Tips

Aby rozpocząć nagrywanie, naciśnij qw trybie normalnym, a następnie literę (od a do z). To rozpoczyna rejestrowanie naciśnięć klawiszy do określonego rejestru. Vim wyświetla „nagranie” w linii statusu. Wpisz dowolne polecenia w trybie normalnym lub wejdź w tryb wstawiania i wpisz tekst. Aby zatrzymać nagrywanie, ponownie naciśnij qw trybie normalnym.

Dla tego konkretnego makra wybrałem mrejestr (do przeniesienia), aby go zapisać.

Nacisnąłem, qmaby nagrać następujące polecenia:

  • dd aby usunąć bieżący wiersz (i zapisać go w rejestrze domyślnym)
  • CtrlWj aby przejść do okna poniżej
  • p aby wkleić zawartość rejestru domyślnego
  • i CtrlWkwrócić do powyższego okna.

Kiedy wpisałem, qaby zakończyć rejestrowanie makra, zawartość mrejestru była następująca:

dd^Wjp^Wk

Stosowanie

  • Aby przesunąć bieżącą linię, po prostu wpisz @mw trybie normalnym.
  • Aby powtórzyć makro w innej linii, @@można użyć do wykonania ostatnio używanego makra.
  • Aby wykonać makro 5 razy (tj. Przesuń bieżącą linię z następującymi czterema liniami poniżej), użyj 5@mlub 5@@.
Anthony Geoghegan
źródło
Poprosiłem o sprawdzenie, czy istnieje jakieś nieznane mi polecenie, które wykonuje tę pracę: wydaje się, że nie ma takiego polecenia. W przypadku braku takiego polecenia może to być dobre rozwiązanie.
Brad
@brad, wszystkie dostępne polecenia znajdziesz w dokumentacji. Jeśli go nie ma, to nie istnieje… nie trzeba pytać przypadkowych nieznajomych.
romainl,
@romainl, tak, wiem o tym, ale dokumentacja vima jest naprawdę ogromna i chociaż mnie to nie przeraża, zawsze istnieje możliwość przeoczenia czegoś. Co więcej, może być również tak, że efekt można uzyskać za pomocą kombinacji 2 poleceń, w tym przypadku nie byłby on w żaden sposób udokumentowany
Brad