it-swarm-vi.tech

Sao chép toàn bộ một dòng trong Vim

Làm cách nào để sao chép toàn bộ một dòng trong Vim theo cách tương tự như Ctrl+D trong IntelliJ IDEA/Resharper hoặc Ctrl+Alt+/ trong Nhật thực?

1492
sumek

yy hoặc là Y sao chép dòng
hoặc là
dd xóa (cắt) dòng

sau đó

p để dán văn bản đã sao chép hoặc bị xóa sa dòng hiện tại
hoặc là
P để dán văn bản đã sao chép hoặc bị xóa trước dòng hiện tại

2555
Mark Biek

Chế độ bình thường: xem các câu trả lời khác.

Ví dụ cách:

  • :t. sẽ nhân đôi dòng,
  • :t 7 sẽ sao chép nó sau dòng 7,
  • :,+t0 sẽ sao chép dòng hiện tại và dòng tiếp theo ở đầu tệp (,+ là từ đồng nghĩa cho phạm vi .,.+1),
  • :1,t$ sẽ sao chép các dòng từ đầu đến vị trí con trỏ đến cuối (1, là từ đồng nghĩa cho phạm vi 1,.).

Nếu bạn cần di chuyển thay vì sao chép, hãy sử dụng :m thay vì :t.

Điều này có thể thực sự mạnh mẽ nếu bạn kết hợp nó với :g hoặc :v

  • :v/foo/m$ sẽ di chuyển tất cả các dòng không khớp với mẫu Foo foo đến cuối tệp.
  • :+,$g/^\s*class\s\+\i\+/t. sẽ sao chép tất cả các dòng tiếp theo của mẫu class xxx ngay sau con trỏ.

Tham khảo: :help range, :help :t, :help :g, :help :m:help :v

375
Benoit

YP hoặc Yp hoặc yyp.

279
Linulin

copy and paste in vim

Không có gì đơn giản hơn thế này! Từ chế độ bình thường:

yy

sau đó di chuyển đến dòng bạn muốn dán tại và

p
229
Adam

yy

sẽ kéo dòng hiện tại mà không xóa nó

dd

sẽ xóa dòng hiện tại

p

sẽ put một dòng được lấy bằng một trong các phương thức trước đó

49
pjz

Làm cái này:

Đầu tiên, yy để sao chép dòng hiện tại, và sau đó p dán.

38
Eric Z Beard

Nếu bạn muốn một cách khác :-)

"ayy này sẽ lưu trữ dòng trong bộ đệm a

"ap điều này sẽ đặt nội dung của bộ đệm a vào con trỏ.

Có nhiều biến thể về điều này.

"a5yy này sẽ lưu trữ 5 dòng trong bộ đệm a

xem http://www.vim.org/htmldoc/help.html để vui hơn

38
Kwondri

yyp - hãy nhớ nó với "yippee!"

Nhiều dòng có một số ở giữa:

y7yp

37
theschmitzer

yyp - dán sau

yyP - dán trước

22
yemu

Bạn cũng có thể thử <C-x> <C-l> sẽ lặp lại dòng cuối cùng từ chế độ chèn và mang đến cho bạn một cửa sổ hoàn thành với tất cả các dòng. Nó hoạt động gần giống như <C-p>

11
nikolavp

Một lựa chọn khác là đi cùng:

nmap <C-d> mzyyp`z

cung cấp cho bạn lợi thế của việc giữ vị trí con trỏ.

11
Rook

Tôi thích: Shift+v (để chọn toàn bộ dòng ngay lập tức và cho phép bạn chọn các dòng khác nếu bạn muốn), y, p

10
Gabe

Đối với người không biết vi, một số câu trả lời từ trên có thể đánh lừa anh ta bằng các cụm từ như "dán ... sau/trước dòng hiện tại".
[.__.] Nó thực sự "dán ... sau/trước con trỏ".

yy hoặc là Y sao chép dòng
hoặc là
dd xóa dòng

sau đó

p để dán văn bản đã sao chép hoặc bị xóa sau  con trỏ
hoặc là
P để dán văn bản đã sao chép hoặc bị xóa trước  con trỏ


[.__.] Để biết thêm các ràng buộc chính, bạn có thể truy cập trang web này: vi Danh sách ràng buộc chính hoàn chỉnh

10
Michael

1 gotcha: khi bạn sử dụng "p" để đặt dòng, nó sẽ đặt sau dòng con trỏ của bạn được bật, vì vậy nếu bạn muốn thêm dòng sau dòng bạn đang kéo, đừng di chuyển con trỏ xuống một dòng trước khi đặt dòng mới.

3
cori

Mặc định là yyp, nhưng tôi đã sử dụng tính năng này trong một năm hoặc lâu hơn và yêu thích nó:

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

2
Chris Penner

Đối với những người bắt đầu tìm hiểu vi, đây là một giới thiệu tốt về vi bằng cách liệt kê các lệnh vi cạnh nhau cho các phím tắt và phím tắt con trỏ của Trình soạn thảo GUI GUI điển hình. Nó liệt kê tất cả các lệnh cơ bản bao gồm yy (dòng sao chép) và p (dán sau) hoặc P(dán trước).

vi (Vim) cho người dùng Windows

1
ap-osd

Tôi biết tôi đến bữa tiệc muộn, nhưng sao cũng được; Tôi có cái này trong .vimrc của tôi:

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

lệnh :copy chỉ sao chép dòng đã chọn hoặc phạm vi (luôn luôn là toàn bộ dòng) bên dưới số dòng được đưa ra làm đối số của nó.

Trong chế độ bình thường, đây là copy . sao chép dòng này ngay bên dưới dòng này .

Và trong chế độ trực quan, nó biến thành '<,'> copy '> sao chép từ đầu lựa chọn đến hết lựa chọn vào dòng bên dưới kết thúc lựa chọn .

1
DarkWiiPlayer

Nếu bạn muốn nhân đôi một dòng và dán nó ngay bên dưới lượt thích hiện tại, giống như trong Sublime Ctrl+Shift+D, sau đó bạn có thể thêm tệp này vào tệp .vimrc của mình.

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

0
jedi

Tôi thích sử dụng ánh xạ này:

:nnoremap yp Yp

bởi vì nó làm cho nó phù hợp để sử dụng cùng với lệnh YP gốc.

0
yolenoyer