Trong Vim, làm cách nào tôi có thể sao chép từ một số dòng? (không phải là một phạm vi);


20

Giả sử tôi có

1 - funct1
2- funct 2
3 - funct 3 
4 line 4

làm cách nào tôi có thể sao chép dòng 1 và 3 (không phải là một loạt các dòng) và dán chúng, ví dụ như ở dòng 8? Nếu tôi làm điều này theo cách với |arg like ( 1y|3y), tôi sẽ kéo các dòng đến một số thanh ghi, phải không? Nhưng làm thế nào tôi có thể đặt từ nhiều thanh ghi cùng một lúc?

Câu trả lời:


33

Bạn có thể thêm vào một thanh ghi thay vì xóa nó bằng cách sử dụng chữ in hoa thay vì chữ thường.

Ví dụ:

:1y a      # copy line 1 into register a (erases it beforehand)
:3y A      # copy line 3 into register a (after its current content)
8G  # go to line 8
"ap        # print register a

1
Bạn cũng có thể làm điều này trong chế độ bình thường với "ayyjj"Ayy"ap.
wchargein

5
(hoặc 1G"ayy3G"Ayy8G"apcho số dòng rõ ràng)
wchargein

1
Không phải nó chỉ Gđể đi đến dòng, phải không <C-G>?
David

1
Điều này thật tuyệt Bạn có thể tiếp tục thêm bao nhiêu thứ vào bộ đệm Anhư bạn muốn và nó sẽ giữ tất cả. Để bắt đầu lại, hãy đăng ký một cái gì đóa
CornSmith

1
@CornSmith Nitpick: đệm là một thuật ngữ rất cụ thể trong ngữ cảnh của vim. "alà một đăng ký .
Doorknob

1

Bạn có thể sử dụng :copylệnh, có thể viết tắt là :t:

:1t8
:3t8

Nếu bạn muốn sao chép một loạt các dòng (ví dụ: tất cả các dòng từ 1 đến 3), bạn có thể làm như thế này:

:1,3t8

Tôi muốn sao chép các dòng theo số, nhưng không phải là RANGE OF LINES ... Tôi có thể với thứ gì đó như lệnh t nối vào dòng không?
Whats Myname

0
1Gyy7Gp #use 7 if you wish to paste the line at 8
3Gyy8Gp #use 8 if you wish to paste the line at 9

Chúng có thể được thể hiện tốt hơn bằng :tlệnh, cũng không xóa "hoặc 0đăng ký.
Doorknob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.