Làm thế nào để kéo một dòng cụ thể mà không di chuyển con trỏ trong vim?


39

Ví dụ

văn bản thay thế

Làm cách nào tôi có thể kéo và dán Dòng 4 chỉ vào Dòng 12 mà không phải di chuyển con trỏ đến Dòng 4?

văn bản thay thế


Tôi đã trả lời câu hỏi của bạn dựa trên thực tế là "yank me!" nằm trên dòng 4. Trong ảnh chụp màn hình thứ 2 của bạn, nó xuất hiện trên dòng 5.
Louis Salin

Cảm ơn @Louis đã trả lời. Tôi đã cập nhật ảnh chụp màn hình.
Lazer

Câu trả lời:


51

Nếu con trỏ đã ở trên dòng 12, thì đơn giản

: 4y
P

làm điều đó cho tôi


1
Tốt đẹp! Có tương đương cho x? Khi tôi cố gắng :4xtôi nhận được E140: Use ! to write partial buffer. Cảm ơn!
dotancohen

Tôi phải nói điều này thật tuyệt vời: D
nXqd

@dotancohen:4d
n.st

Có một cách tốt để làm điều này với số dòng tương đối?
TrungDQ

Với số tương đối chỉ cần sử dụng + và -. Vậy -4 là bốn hàng phía trên con trỏ và +4 là bốn hàng bên dưới nó.
rickythefox

10

Làm thế nào về điều này: Con trỏ ở dòng 11, bạn đang ở chế độ "vi".

:4co.<return>

Bạn rõ ràng cũng có thể làm điều đó với một mô hình:

:/^Yank/co.<return>

Bạn có thể sử dụng "mo" (di chuyển) thay vì "co" (sao chép) để chỉ di chuyển dòng, thay vì kéo và đặt.


1
Thậm chí ngắn hơn ( t như một lệnh sao chép là phần còn lại từ ed)::4t.
tarleb


8

Thử:

:4co11

Bạn có thể sử dụng một đối số 0để dán vào dòng 1. Điều này cũng sẽ làm việc với phạm vi:

:m,n co k

sẽ sao chép các dòng mthông qua ndòng k+1. Ngoài ra, không quan trọng bạn đang ở đâu trong bộ đệm. Các movelệnh, m, hoạt động tương tự.


2

Điều này nên làm điều đó:

:4,12y
p
k

1
Không, có các dòng số từ 4 đến 12.
Lazer

Tôi có nghĩa là sao chép và dán dòng 4, dòng 12.
Lazer

Đã chỉnh sửa. Đây có phải là điều bạn muốn không?
Umang

2

Những người khác đã đề cập đến phương pháp trực tiếp nhất để làm điều này, đó là :4y, nhưng tôi muốn thêm hai lưu ý về nó có thể hữu ích:

Thứ nhất, nếu bạn nhập vào, :help rangebạn sẽ tìm hiểu tất cả về việc sử dụng các phạm vi để áp dụng cho các lệnh kiểu Ex. RẤT hữu ích trong nhiều trường hợp và linh hoạt hơn nhiều so với sử dụng số dòng. Ví dụ: nếu bạn muốn kéo dòng đầu tiên bắt đầu bằng "yank" sau khi bắt đầu tài liệu (ngay cả khi nó ở dòng đầu tiên), hãy sử dụng :0/^yank/y. Phần mạnh nhất của các phạm vi là khả năng kết hợp chúng, ví dụ: :./^Chapter/+50?Pete?d"Tìm dòng tiếp theo để bắt đầu với từ Chương (tìm kiếm từ dòng hiện tại), sau đó nhảy về phía trước 50 dòng và tìm kiếm ngược từ Pete, và xóa dòng đầu tiên bạn tìm thấy. " Ngoại trừ việc nó không thực sự di chuyển con trỏ, nó chỉ LÀM những gì bạn nói với nó.

(Tôi đã sử dụng loại đặc tả phạm vi này để tự động hóa việc tạo tài liệu khó khăn liên quan đến việc tìm kiếm tên hàm dưới con trỏ, sau đó tìm kiếm dòng tiếp theo có nội dung "Mô tả" và kéo nó đến một thanh ghi cụ thể ... vv.)

Mẹo khác, là bạn nên biết về nhảy. Nhập :help jump-motionsđể tìm hiểu về nó đầy đủ, nhưng cách liên quan ở đây là bạn có thể nhảy đến dòng 4, kéo nó và sau đó TRẢ LẠI với 4Gyy''(hoặc sử dụng backticks thay vì dấu nháy đơn để quay lại vị trí bắt đầu chính xác của bạn, thay vì chỉ cùng LINE bạn đã bắt đầu lúc.)


2

Ngắn nhất:

:1t. sao chép dòng đầu tiên bên dưới hiện tại.

Với phạm vi: :1,4t.bản sao dòng 1 đến 4 (đã bao gồm) bên dưới hiện tại.

Cũng có thể với số dòng tương đối:

:-1t. sao chép dòng trước bên dưới hiện tại.

Trong ví dụ của bạn :4t-1sẽ sao chép dòng thứ tư bên dưới dòng mong muốn.

Lưu ý: :tlà một từ đồng nghĩa với :co[py]lệnh.

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.