Câu hỏi Sao chép toàn bộ dòng trong Vim


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


1310
2017-09-16 15:02


gốc


Mọi người không chạy vimtutor nữa? Đây có lẽ là trong năm phút đầu tiên học cách sử dụng Vim. - dash-tom-bang
waaah, tâm trí thổi, chắc chắn không bao giờ chạy vimtutor, mẹo tuyệt vời - Ralph Callaway
Bạn có muốn nhân đôi dòng này không? Yes Pcho thuê. :) - Stavr00


Các câu trả lời:


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 xóa sau dòng hiện tại
hoặc là
P để dán văn bản đã sao chép hoặc xóa trước dòng hiện tại


2247
2017-09-16 15:06



Cũng có thể sử dụng vốn Y để sao chép toàn bộ dòng. - camflan
Một điểm tuyệt vời. Vì một lý do nào đó, tôi thấy đánh y hai lần nhanh hơn tôi so với SHIFT-y - Mark Biek
@camflan Tôi nghĩ rằng Y nên được "sao chép từ con trỏ đến cùng" - nXqd
và 2yy có thể được sử dụng để sao chép 2 dòng (và cho bất kỳ n nào khác) - Amir Ali Akbari
Để sao chép hai dòng, nó thậm chí còn nhanh hơn chỉ để đi yj hoặc là yk, đặc biệt là kể từ khi bạn không tăng gấp đôi lên trên một nhân vật. Thêm, yk là phiên bản ngược lại 2yykhông thể làm, và bạn có thể đặt số lượng các dòng để đạt được ngược lại trong y9j hoặc là y2k, vv .. Chỉ có sự khác biệt là số lượng của bạn phải là n-1 Tổng cộng n dòng, nhưng đầu của bạn có thể học được điều đó. - zelk


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

Các Ví dụ đường:

  • :t. sẽ lặp lạ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 vào đầu tệp (,+ là một 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à một 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 là :v:

  • :v/foo/m$ sẽ di chuyển tất cả các dòng không khớp với mẫu "foo" vào 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 biểu mẫu class xxx ngay sau con trỏ.

Tài liệu tham khảo: :help range, :help :t, :help :g, :help :m và :help :v


356
2018-04-17 15:17



Khi bạn nhấn : trong chế độ trực quan, nó được chuyển thành '<,'> do đó, nó chọn trước phạm vi dòng mà lựa chọn trực quan được mở rộng. Vì vậy, trong chế độ trực quan, :t0 sẽ sao chép các dòng ngay từ đầu. - Benoit
Đối với bản ghi: khi bạn nhập dấu hai chấm (:), bạn chuyển sang chế độ dòng lệnh, nơi bạn có thể nhập các lệnh Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Các lệnh ex có thể thực sự mạnh mẽ và ngắn gọn. Các giải pháp yyp là lệnh "Chế độ thông thường". Nếu bạn muốn sao chép / di chuyển / xóa một dòng xa hoặc phạm vi của một dòng lệnh Ex có thể nhanh hơn rất nhiều. - Niels Bom
Downvoted không phải do một vấn đề với câu trả lời như vậy (mặc dù nó sẽ không làm việc cho tình hình của tôi, tôi không có ý tưởng số dòng tôi muốn nhân bản) nhưng bởi vì nó thực sự không nên là câu trả lời hàng đầu / chấp nhận cho điều này câu hỏi thường được tìm kiếm. - mjaggard
@mjaggard: câu trả lời được chấp nhận luôn ở trên cùng, bất kể điểm số của họ là gì. Có, tôi đã thêm câu trả lời đó làm bổ sung, và có vẻ như nó phù hợp với OP. - Benoit
:t. là câu trả lời chính xác cho câu hỏi. - Burak Erdem


YP hoặc là Yp hoặc là yyp.


272
2017-09-16 15:07



Y thường được chuyển sang y$ (yank (sao chép) cho đến khi kết thúc dòng (từ vị trí con trỏ hiện tại, không bắt đầu của dòng)) mặc dù. Với dòng này trong .vimrc: :nnoremap Y y$ - Aaron Thoma
Đừng quên người nghèo yyP - icc97


copy and paste in vim

Không nhận được bất kỳ đơn giản hơn này! Từ chế độ bình thường:

yy

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

p

213
2018-02-07 22:20



Bạn đã làm gì để tạo gif? - Zoltán
Điều đó đã được thực hiện với Camtasia Studio 8. Rất dễ thực sự. - Adam
@ Zoltán bạn có thể sử dụng LiceCap, đó là kích thước nhỏ - onmyway133
GifCam cũng là một công cụ đơn giản để sử dụng: blog.bahraniapps.com/gifcam - Jared


yy

sẽ giật 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ởi một trong các phương pháp trước


44
2017-09-16 15:04



Điều này đến trước nhưng nó trùng lặp được chấp nhận: stackoverflow.com/a/73357/1438029 - Geoffrey Hale


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

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

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

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

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

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


37
2017-09-16 15:37



Cảm ơn, tôi sử dụng này như là một ràng buộc: bản đồ <Leader> d "ayy" ap - frbl


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

Nhiều dòng với một số ở giữa:

y7yp


35
2017-09-16 15:16



7yy tương đương với y7y và có lẽ dễ nhớ hơn cách thực hiện. - graywh
y7yp (hoặc 7yyp) hiếm khi hữu ích; con trỏ vẫn còn trên dòng đầu tiên được sao chép sao cho p dán các dòng được sao chép giữa dòng đầu tiên và dòng thứ hai của nguồn. Để nhân bản một khối các dòng sử dụng 7yyP - Nefrubyr
@Nefrubyr hoặc :.,.+7 copy .+7 : P - DarkWiiPlayer


Làm cái này:

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


33
2017-09-16 15:04



Đừng gõ dấu cách. - Niels Bom
Có, nếu con trỏ ở cuối dòng và bạn nhập khoảng trắng như được hiển thị, bạn sẽ nhân đôi dòng bạn đã kéo mạnh 2 dòng bên dưới dòng bạn đã giật mạnh.


yyp - dán sau

yyP - dán trước


19
2017-10-12 18:23



Vì dòng đang được nhân bản, kết quả cuối cùng của nội dung giống nhau. - A-B-B
@ A-B-B Tuy nhiên, có một sự khác biệt nhỏ ở đây - con trỏ chuột của bạn sẽ rơi vào đường nào. - Mikk


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 chỉnh với tất cả các dòng. Nó hoạt động gần giống như <C-p>


11
2017-09-18 20:32



Điều này là rất hữu ích, nhưng để tránh phải nhấn nhiều phím tôi đã ánh xạ nó để chỉ CTRL-L, đây là bản đồ của tôi: inoremap ^ L ^ X ^ L - Jorge Gajon