Làm thế nào để kéo một dòng với một số dòng nhất định?


41

Nói rằng tôi đang ở dòng 20 và tôi muốn kéo dài dòng 4, làm thế nào tôi có thể làm điều đó?

Và tương tự, làm thế nào tôi có thể kéo một dòng liên quan đến vị trí con trỏ của tôi, giả sử một dòng 3 lên?


Câu trả lời:


59

Từ :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Vì vậy, để kéo dài dòng 4, người ta sẽ gõ:

:4yank

Lưu ý bạn có thể dễ dàng làm điều này từ chế độ chèn với <C-o>; điều này cho phép bạn thực thi một lệnh, sau đó bạn quay lại chế độ chèn; ví dụ:

<C-o>:4yank

Tất nhiên, bạn cũng có thể sử dụng các phạm vi khác. Vài ví dụ:

  • Dòng 1 đến 3: :1,3yank
  • Toàn bộ bộ đệm: :%yank
  • Từ dòng hiện tại đến cuối bộ đệm: :.,$:yank
  • Dòng hiện tại và 3 dòng tiếp theo: :.,+3yank
  • Dòng hiện tại và 3 dòng trước: :-3,.yank
  • Dòng 3 dòng trên dòng hiện tại: :-3yank

Những điều hữu ích nhất cần nhớ về phạm vi:

  • Nó ở dạng :line1,line2command.
  • A .là dòng hiện tại (bạn thực sự có thể bỏ qua dấu chấm trong hầu hết các trường hợp; :.,+3yank:,+3yankgiống nhau)
  • Bạn chỉ định các dòng liên quan đến vị trí hiện tại với +n-n.

Xem :help [range]để biết thêm thông tin.


6
Điểm thưởng khi đề cập đến <Co>, tôi đang sử dụng điều đó.
PhilippFrank

7
Điều đáng nói là bạn có thể viết tắt :4yankbằng:4y
NewbieOnRails

35

Ngoài câu trả lời của Carpetsmoker, tôi nên chỉ ra điều tuyệt vời :help :m:help :t.

Nếu bạn muốn sao chép dòng 4 sang bên dưới dòng hiện tại, bạn có thể làm điều này:

:4t.

hoặc đó, nếu bạn muốn sao chép dòng đó ngay phía trên dòng hiện tại:

:4t-

1

Bên cạnh các lệnh chế độ cũ mà bạn có, bạn cũng có thể đạt được nó trong chế độ lệnh, ví dụ: bởi: 4GY''- có nghĩa là: goto dòng 4 ( 4G), dòng yank ( Y) và quay lại dòng trước ( '').

Bạn cũng có thể sử dụng dấu nhảy; cho câu hỏi thứ hai của bạn, ví dụ: bởi: mm3kY'm- có nghĩa là: đặt dấu m ( mm), đi ba dòng lên ( 3k), dòng yank ( Y), quay lại đánh dấu m ( 'm).


1
Sử dụng `` có lẽ là một đề xuất tốt hơn '' vì trước đây quay lại cùng một dòng và cột. Ditto cho `m so với 'm.
jamessan

Tôi đồng ý. .
Janis

Bạn phải sử dụng nhiều backticks để phân định mã nội tuyến (cf, daredfireball.net/projects/markdown/syntax#code ). Tôi biết nó hoạt động trong các câu hỏi / câu trả lời, nhưng tôi không thể làm cho nó hoạt động trong bình luận của tôi.
jamessan

1

Đơn giản chỉ cần gõ

:4y

để kéo dài dòng 4

nó sẽ đi vào thanh ghi không tên. Sau đó, (ví dụ) bạn có thể sử dụng pđể đặt nó ở nơi khác. Bạn cũng có thể sử dụng [n]p, ví dụ 10p để dán 10 lần.

Bạn có thể đặt nó vào một thanh ghi có tên như "a" với

:4y a

2
Phần về việc đưa nó vào một thanh ghi có tên với "ay4 trông không ổn. Nếu bạn làm điều đó, vim sẽ đợi bạn nói" 4 whats? ". Ví dụ: nếu bạn nhấn Enter, nó sẽ kéo dài 4 dòng bắt đầu từ vị trí hiện tại, nếu bạn nhập / foo <Enter> thì nó sẽ kéo dài đến lần xuất hiện thứ 4 sau "foo", v.v.
Don Hatch

Lệnh cuối cùng nên đọc 4G"ayy.
romainl

0

Bạn có thể làm

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

Thiết lập số tương đối cũng giúp di chuyển giữa các dòng mã.

:set relativenumber

Bây giờ bạn có thể sao chép dòng thứ 5 phía trên con trỏ bằng:

:-5y <Enter>
:p (to paste)
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.