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
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.
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.
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$
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.
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
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>
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
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.
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).
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 .
Y
esP
dzierżawy. :)Odpowiedzi:
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
źródło
Y
sięy$
. (Zgodnie zD
iC
;. (Lecz nie Vi kompatybilny (nikt nie dba))) To jest nawet zaproponowano w:help Y
.yj
lubyk
, zwłaszcza, że nie podwajasz jednej postaci. Plus,yk
jest wersją wsteczną, która2yy
nie może tego zrobić, i możesz podać liczbę linii, aby sięgnąć wsteczy9j
luby2k
itd. Jedyną różnicą jest to, że liczba musi obejmowaćn-1
całkowitą liczbęn
linii, ale Twoja głowa może się tego nauczyć tak czy siak.Tryb normalny: patrz inne odpowiedzi.
Ex sposób:
:t.
powieli linię,:t 7
skopiuje go po linii 7,:,+t0
skopiuje 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 zakresu1,.
).Jeśli chcesz przenieść zamiast kopiować, użyj
:m
zamiast:t
.To może być naprawdę potężny, jeśli połączyć je z
:g
lub: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 formularzaclass xxx
zaraz za kursorem.Numer referencyjny:
:help range
,:help :t
,:help :g
,:help :m
i:help :v
źródło
:
w trybie wizualnym, jest on przekształcany, aby'<,'>
wstępnie wybierać zakres linii, nad którym zaznaczony jest widok wizualny. W trybie wizualnym:t0
skopiuje linie na początku.:t.
jest dokładną odpowiedzią na pytanie.YP
lubYp
lubyyp
.źródło
Y
jest jednak zwykle odwzorowywany nay$
(szarpanie (kopiowanie) do końca linii (od aktualnej pozycji kursora, a nie początku linii)). W tym wierszu.vimrc
::nnoremap Y y$
yyP
Nie ma nic prostszego niż to! Z trybu normalnego:
następnie przejdź do linii, którą chcesz wkleić i
źródło
yy
będzie szarpał bieżącą linię bez usuwania jej
dd
usunie bieżący wiersz
p
będzie
put
linia przechwycona przez jedną z poprzednich metodźródło
Zrób to:
Najpierw yyskopiuj bieżącą linię, a następnie pwklej.
źródło
Jeśli chcesz inny sposób:
"ayy
: Spowoduje to zapisanie linii w buforzea
."ap
: Umieści zawartość buforaa
pod kursorem.Istnieje wiele odmian tego.
"a5yy
: Spowoduje to zapisanie 5 linii w buforzea
.Zobacz „ Pliki pomocy Vima dla większej zabawy.
źródło
yyp - pamiętaj o tym z „yippee!”
Wiele linii z liczbą pomiędzy:
y7yp
źródło
:.,.+7 copy .+7
: Pyyp - wklej po
yyP - wklej wcześniej
źródło
Lubię: Shift+ v(aby od razu zaznaczyć całą linię i pozwolić ci wybrać inne linie, jeśli chcesz), y, p
źródło
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>
źródło
Inną opcją byłoby pójście z:
daje przewagę polegającą na zachowaniu pozycji kursora.
źródło
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
źródło
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.
źródło
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
źródło
Wiem, że spóźniam się na przyjęcie, ale cokolwiek; Mam to w moim .vimrc:
:copy
poleceń 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 .źródło
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
źródło
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
.vimrc
pliku.nmap <S-C-d> <Esc>Yp
Lub w przypadku trybu wstawiania:
imap <S-C-d> <Esc>Ypa
źródło
i
do końca, aby ponownie wejść, psuje sięundo
, więc rozwiązanie duplikowania linii w trybie wstawiania nie jest tak proste, jak się wydaje.imap <S-C-d> <Esc>Ypi
tryb wstawiania inmap <S-C-d> <Esc>Yp
tryb normalnyLubię używać tego mapowania:
ponieważ sprawia, że używanie go razem z
YP
poleceniem natywnym jest spójne .źródło