vi [m] czytaj zakres linii z innego pliku

9

W systemie Linux edytując file_Bw vimie chcę dodać linię 10-25 file_A. Przykład: jeden ma cały zestaw dokumentów HTML z tym samym nagłówkiem i tak, można utworzyć szablon i zacząć od tego, ale nadal:

Szukam prostego [i eleganckiego] sposobu wstawienia zakresu wierszy z jednego pliku i dodania go do pliku, który aktualnie edytuję. In vim.

Rozwiązania, które znalazłem do tej pory, ale nie są dokładnie tym , czego szukam

  • wewnątrz file_B polecenia :read file_Adoda * cały plik_A * do pliku_B. Zbyt wiele
  • vim zawiera kopiuj i wklej - ale do tego musi być otwarty file_A
  • w pliku_A :10,25w! file_B„wyśle” podany zakres wierszy do file_B.
    Wydaje się to dość zbliżone do kopiowania i wklejania
  • w vimie można otwierać wiele okien
    Ale kiedy pracuję na 8-calowym ekranie, wiele okien utrudnia orientację

Ponieważ nie byłem w stanie znaleźć wygodnego rozwiązania, zastanawiam się, czy po prostu coś źle zrozumiałem lub sposoby, które do tej pory znalazłem, są powszechnie stosowane i traktowane jako standardowe.

erch
źródło
Zobacz to SO pytanie , odpowiedź @ Bernharda była również zaakceptowaną odpowiedzią na to pytanie!
slm
@slm Byłem świadomy tej odpowiedzi, ale ponieważ nie umieściłem jej na liście znalezionych rozwiązań, dziękuję za podpowiedź. Nadal szukam czegoś wbudowanego vim. Ale wydaje się to poza zasięgiem. I naprawdę zastanawiam się, czy można to osiągnąć tylko za pomocą zewnętrznych poleceń, ponieważ o ile mi się vimteraz udało , doszedłem do niewielkich ograniczeń do tej pory .
erch
@ cellar.dweller Możesz zrobić z tego jakąś funkcję, jeśli naprawdę chcesz czegoś łatwiejszego.
Bernhard

Odpowiedzi:

11

Najlepszym rozwiązaniem, jakie mogę wymyślić, jest zewnętrzne połączenie sedi połączenie z tym:read !

:r !sed -n -e '10,25p' fileB
Bernhard
źródło
Tu nie działa - ale dlaczego? Po pierwsze dziękuję za pomoc. Dostaję „E34: brak poprzedniego polecenia” [z grubsza przetłumaczone], tak jakby vim próbował powtórzyć polecenie. O ile rozumiem, krok po kroku: :rskrót od readvim. Nie mam wiedzy na temat sedi jak z niego korzystać. Oczywiście zastąpiłem fileBwłaściwym plikiem :)
erch
@ cellar.dweller Moja odpowiedź została przez kogoś zaktualizowana, otrzymałem ten sam błąd przez ten kod. Zwróciłem to. Sprawdź, czy to Ci odpowiada.
Bernhard
@Stephane Dobrze skracać odpowiedzi, ale twoja sugestia nie zadziałała.
Bernhard
Teraz działa! Aby dodać trochę myslef: rozpoczęcie od :10ritp. Umieści zawartość z dziesiątej linii na [tak długo, jak to istnieje]. Teraz działa jak urok. Świetny. Wielkie dzięki!
erch
2
UPS przepraszam. Zapomniałem o rozszerzeniu vima! Powinien być :r!sed 10,25\!d. Pamiętaj, że nie potrzebujesz -ecudzysłowów, więc możesz napisać je również :r!sed -n 10,25pw skrócie. :r sed '10,$\!d;25q'aby uniknąć odczytu całego pliku.
Stéphane Chazelas