Jak zaciągnąć linię o określonym numerze?

Odpowiedzi:

59

Od :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Aby szarpać linię 4, należy wpisać:

:4yank

Uwaga: możesz to łatwo zrobić w trybie wstawiania za pomocą <C-o>; pozwala to na wykonanie jednego polecenia, po którym powracasz do trybu wstawiania; na przykład:

<C-o>:4yank

Możesz oczywiście użyć także innych zakresów. Kilka przykładów:

  • Linie od 1 do 3: :1,3yank
  • Cały bufor: :%yank
  • Od bieżącej linii do końca bufora: :.,$:yank
  • Obecna linia i kolejne 3: :.,+3yank
  • Obecna linia i poprzednie 3: :-3,.yank
  • Linia 3 linie powyżej bieżącej linii: :-3yank

Najbardziej przydatne rzeczy do zapamiętania na temat zakresów:

  • Jest w formie :line1,line2command.
  • A .jest bieżącą linią (w większości przypadków można pominąć kropkę; :.,+3yanki :,+3yanksą takie same)
  • Podajesz linie względem bieżącej pozycji za pomocą +ni -n.

Zobacz :help [range]więcej informacji.

Martin Tournoij
źródło
6
Punkty bonusowe za wspomnienie <Co>, nie wykorzystuję tego.
PhilippFrank
7
Warto też wspomnieć, że można skrócić :4yankz:4y
NewbieOnRails
35

Oprócz odpowiedzi Carpetsmokera, powinienem zwrócić uwagę na niesamowite :help :mi :help :t.

Jeśli chcesz skopiować wiersz 4 bezpośrednio pod bieżącym wierszem, możesz to zrobić:

:4t.

lub jeśli chcesz skopiować tę linię bezpośrednio nad bieżącą linią:

:4t-
romainl
źródło
1

Oprócz poleceń ex-mode, które masz, możesz to również osiągnąć w trybie poleceń, np .: przez 4GY''co: goto linia 4 ( 4G), yank line ( Y) i powrót do poprzedniej linii ( '').

Możesz także użyć znaków skoku; na drugie pytanie, np. przez: mm3kY'm- co oznacza: ustaw znak m ( mm), przejdź trzy linie w górę ( 3k), yank line ( Y), wróć do znaku m ( 'm).

Janis
źródło
1
Użycie `` jest prawdopodobnie lepszym zaleceniem niż '', ponieważ poprzedni powraca do tej samej linii i kolumny. To samo dotyczy „m vs.” m.
jamessan
Zgadzam się. (Masz pomysł, jak stworzyć dosłowne backtiki w znacznikach wiki, ponieważ mają one specjalne znaczenie?) - W przeciwnym razie twój komentarz będzie dobrze służył jako poprawka do mojej odpowiedzi i jako wskazówka dla czytelników.
Janis,
Do rozgraniczenia kodu wbudowanego należy użyć wielu odwrotnych znaków (patrz: daringfireball.net/projects/markdown/syntax#code ). Wiem, że działa w przypadku pytań / odpowiedzi, ale nie mogłem sprawić, by zadziałało w moim komentarzu.
jamessan
1

Po prostu wpisz

:4y

do szarpnięcia linii 4

przejdzie do rejestru bez nazwy. Następnie (na przykład) możesz użyć, paby umieścić go w innym miejscu. Możesz także użyć [n]pnp. 10p, aby wkleić go 10 razy.

Możesz umieścić go w nazwanym rejestrze, takim jak „a” za pomocą

:4y a
Michael Durrant
źródło
2
Część dotycząca umieszczenia go w rejestrze o nazwie „ay4 nie wygląda dobrze. Jeśli to zrobisz, vim będzie czekał, aż powiesz„ 4 whats? ”. Np. Jeśli wciśniesz Enter, szarpnie 4 linie zaczynając od aktualna pozycja, jeśli wpiszesz / foo <Enter>, będzie szarpać do czwartego następnego wystąpienia „foo” itp.
Don Hatch
Ostatnie polecenie powinno zostać przeczytane 4G"ayy.
romainl
0

Możesz to zrobić

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

Ustawienie względnej liczby pomaga również w przemieszczaniu się między wierszami kodu.

:set relativenumber

Teraz możesz skopiować 5. linię nad kursorem za pomocą:

:-5y <Enter>
:p (to paste)
Stryker
źródło