Jak zduplikować całą linię w Vimie w Eclipse?


1624

Jak zduplikować całą linię w Vimie w podobny sposób jak Ctrl+ Dw IntelliJ IDEA / Resharper lub Ctrl+ Alt+ / w Eclipse ?


49
Czy ludzie nie prowadzą już vimtutora? Jest to prawdopodobnie w ciągu pierwszych pięciu minut nauki używania Vima.
dash-tom-bang

131
Czy chcesz powielić tę linię? Yes Pdzierżawy. :)
Stavr00

3
FWIW Zrobiłem vimtutor kilkanaście razy w ciągu ostatnich 2 miesięcy i ta koncepcja nie jest objęta. Mówi, jak zrobić „dd” i „v - nawiguj - y”, a następnie „p”. Nie mówi, jak skopiować pojedynczy wiersz bez usuwania go, tak jak jest to wymagane tutaj.
danielson317,

Odpowiedzi:


2769

yylub Yskopiować linię (symbol: y ank )
lub
dddo d suĹ linię (Vim kopie czego usunięte w schowku-like „register”, jak cięcia pracy)

następnie

pdo p Aste skopiowany lub usunięty tekst po aktualnej linii
lub
Pdo p Aste skopiowanego tekstu lub usunięty przed bieżącym wierszu


129
Doskonały punkt. Z jakiegoś powodu uważam, że dwukrotne naciśnięcie y jest dla mnie szybsze niż SHIFT-y
Mark Biek

25
@camflan Myślę, że Y powinno być „kopiowaniem od kursora do końca”
Dzung Nguyen,

42
i 2 lata można skopiować 2 wiersze (i dowolne inne n)
Amir Ali Akbari

5
@nXqd: Tak, duży procent użytkowników odwzorowuje Ysię y$. (Zgodnie z Di C;. (Lecz nie Vi kompatybilny (nikt nie dba))) To jest nawet zaproponowano w :help Y.
Aaron Thoma,

11
Aby skopiować dwie linie, jeszcze szybciej jest przejść yjlub yk, zwłaszcza, że ​​nie podwajasz jednej postaci. Plus, ykjest wersją wsteczną, która 2yynie może tego zrobić, i możesz podać liczbę linii, aby sięgnąć wstecz y9jlub y2kitd. Jedyną różnicą jest to, że liczba musi obejmować n-1całkowitą liczbę nlinii, ale Twoja głowa może się tego nauczyć tak czy siak.
zelk

406

Tryb normalny: patrz inne odpowiedzi.

Ex sposób:

  • :t. powieli linię,
  • :t 7 skopiuje go po linii 7,
  • :,+t0skopiuje bieżący i następny wiersz na początku pliku ( ,+jest synonimem zakresu .,.+1),
  • :1,t$skopiuje linie od początku do pozycji kursora do końca ( 1,jest synonimem zakresu 1,.).

Jeśli chcesz przenieść zamiast kopiować, użyj :mzamiast :t.

To może być naprawdę potężny, jeśli połączyć je z :glub :v:

  • :v/foo/m$ przeniesie wszystkie wiersze, które nie pasują do wzorca „foo” na końcu pliku.
  • :+,$g/^\s*class\s\+\i\+/t.skopiuje wszystkie kolejne wiersze formularza class xxxzaraz za kursorem.

Numer referencyjny: :help range, :help :t, :help :g, :help :mi:help :v


1
Gdy naciśniesz :w trybie wizualnym, jest on przekształcany, aby '<,'>wstępnie wybierać zakres linii, nad którym zaznaczony jest widok wizualny. W trybie wizualnym :t0skopiuje linie na początku.
Benoit

1
Dla przypomnienia: po wpisaniu dwukropka (:) przechodzi się do trybu wiersza poleceń, w którym można wprowadzać polecenia Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Polecenia ex mogą być naprawdę potężne i zwięzłe. Takimi rozwiązaniami są polecenia „Tryb normalny”. Jeśli chcesz skopiować / przenieść / usunąć daleką linię lub zakres linii, polecenie Ex może być znacznie szybsze.
Niels Bom

7
Nie doceniono mnie nie z powodu problemu z odpowiedzią jako taką (chociaż nie zadziałałoby w mojej sytuacji, nie mam pojęcia, który numer wiersza chcę powielić), ale ponieważ NAPRAWDĘ nie powinna to być górna / akceptowana odpowiedź na to pytanie najczęściej wyszukiwane pytanie.
mjaggard,

9
@mjaggard: zaakceptowane odpowiedzi są zawsze na górze, niezależnie od ich wyniku. Tak, dodałem tę odpowiedź jako uzupełnienie i wydaje się, że dobrze pasowała do PO.
Benoit,

7
:t.jest dokładną odpowiedzią na pytanie.
Burak Erdem

293

YPlub Yplub yyp.


Yjest jednak zwykle odwzorowywany na y$(szarpanie (kopiowanie) do końca linii (od aktualnej pozycji kursora, a nie początku linii)). W tym wierszu .vimrc::nnoremap Y y$
Aaron Thoma

1
Nie zapomnij o biednym starymyyP
icc97 13.04.17

253

skopiuj i wklej w vimie

Nie ma nic prostszego niż to! Z trybu normalnego:

yy

następnie przejdź do linii, którą chcesz wkleić i

p

34
Czego użyłeś do zrobienia gif?
Zoltán

4
@ Zoltán można użyć LiceCap, który jest mały rozmiar
onmyway133


44

Zrób to:

Najpierw yyskopiuj bieżącą linię, a następnie pwklej.


20
Nie wpisuj spacji.
Niels Bom

1
Tak, jeśli kursor znajduje się na końcu linii i wpiszesz spację, jak pokazano, powielisz linię, którą szarpnąłeś 2 linie poniżej linii, którą szarpnąłeś.

44

Jeśli chcesz inny sposób:

"ayy: Spowoduje to zapisanie linii w buforze a.

"ap: Umieści zawartość bufora apod kursorem.

Istnieje wiele odmian tego.

"a5yy: Spowoduje to zapisanie 5 linii w buforze a.

Zobacz „ Pliki pomocy Vima dla większej zabawy.


Dzięki, użyłem tego jako powiązania: map <Leader> d "ayy" ap
frbl

39

yyp - pamiętaj o tym z „yippee!”

Wiele linii z liczbą pomiędzy:

y7yp


17
7 lat to odpowiednik lat 7 i prawdopodobnie łatwiej jest zapamiętać, jak to zrobić.
graywh

10
y7yp (lub 7yyp) jest rzadko przydatny; kursor pozostaje w pierwszym wierszu skopiowanym, tak że p wkleja skopiowane wiersze między pierwszym i drugim wierszem źródła. Aby zduplikować blok linii, użyj 7yyP
Nefrubyr

@Nefrubyr lub :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - wklej po

yyP - wklej wcześniej


6
Ponieważ wiersz jest duplikowany, końcowy wynik zawartości jest taki sam.
Acumenus,

4
@ABB Istnieje jednak niewielka różnica - na jakiej linii wyląduje kursor.
Mikk

12

Lubię: Shift+ v(aby od razu zaznaczyć całą linię i pozwolić ci wybrać inne linie, jeśli chcesz), y, p


11

Możesz także spróbować <Cx> <Cl>, który powtórzy ostatnią linię z trybu wstawiania i wyświetli okno zakończenia ze wszystkimi liniami. Działa prawie jak <Cp>


Jest to bardzo przydatne, ale aby uniknąć konieczności naciskania wielu klawiszy, zamapowałem go tylko na CTRL-L, oto moja mapa: inoremap ^ L ^ X ^ L
Jorge Gajon

11

Inną opcją byłoby pójście z:

nmap <C-d> mzyyp`z

daje przewagę polegającą na zachowaniu pozycji kursora.


10

Dla kogoś, kto nie zna vi, niektóre odpowiedzi z góry mogą wprowadzić go w błąd za pomocą zwrotów takich jak „wklej ... po / przed bieżącą linią ”.
W rzeczywistości jest to „wklej ... po / przed kursorem ”.

yylub Yaby skopiować linię
lub
ddusunąć linię

następnie

pwkleić skopiowany lub usunięty tekst po tym kursorem
lub
Pwkleić skopiowany lub usunięty tekst zanim do kursora


Aby uzyskać więcej powiązań klawiszy, możesz odwiedzić tę stronę: vi Pełna lista powiązań klawiszy


3

1 gotcha: kiedy używasz „p”, aby wstawić linię, to umieszcza ją po linii, na której znajduje się kursor, więc jeśli chcesz dodać linię po linii, którą szarpiesz, nie przesuwaj kursora w dół linii przed wprowadzeniem nowej linii.


4
lub użyj kapitału P - postawionego wcześniej
Ghoti

3

Domyślnie jest yyp, ale używam tego wiązania od około roku i uwielbiam to:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

Wiem, że spóźniam się na przyjęcie, ale cokolwiek; Mam to w moim .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

:copypoleceń należy kopiuje wybraną linię i zakresu (zawsze cały linie) pod numer linii podano jako argument.

W trybie normalnym powoduje to copy . skopiowanie tego wiersza do tuż poniżej tego wiersza .

W trybie wizualnym zmienia się w '<,'> copy '> kopię od początku zaznaczenia do końca zaznaczenia do linii poniżej końca zaznaczenia .


1
↑↑ najlepsza odpowiedź tutaj!

2

Dla tych, którzy zaczynają się uczyć vi, jest to dobre wprowadzenie do vi, wymieniając obok siebie polecenia vi do typowych ruchów kursora i klawiszy skrótu edytora GUI systemu Windows. Zawiera listę wszystkich podstawowych poleceń, w tym yy(kopiuj wiersz) i p(wklej po) lub P(wklej przed).

vi (Vim) dla użytkowników systemu Windows


1

Jeśli chcesz powielić linię i wkleić ją od razu pod bieżącym, tak jak w Sublime Ctrl+ Shift+ D, możesz dodać to do swojego .vimrcpliku.

nmap <S-C-d> <Esc>Yp

Lub w przypadku trybu wstawiania:

imap <S-C-d> <Esc>Ypa


To jednak pozostawia tryb wstawiania, a samo dodawanie ido końca, aby ponownie wejść, psuje się undo, więc rozwiązanie duplikowania linii w trybie wstawiania nie jest tak proste, jak się wydaje.
DarkWiiPlayer,

Działa to dla mnie idealnie: imap <S-C-d> <Esc>Ypi tryb wstawiania i nmap <S-C-d> <Esc>Yptryb normalny
jedi

0

Lubię używać tego mapowania:

:nnoremap yp Yp

ponieważ sprawia, że ​​używanie go razem z YPpoleceniem natywnym jest spójne .

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.