Làm cách nào để sao chép toàn bộ một dòng trong Vim tại Eclipse?


1624

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


49
Có phải mọi người không chạy vimtutor nữa? Đây có lẽ là trong vòng năm phút đầu tiên học cách sử dụng Vim.
dash-tom-bang

131
Bạn có muốn nhân đôi dòng này? cho thuê Yes P. :)
Stavr00

3
FWIW Tôi đã thực hiện vimtutor khoảng một chục lần trong 2 tháng qua và khái niệm này không được đề cập. Nó cho biết làm thế nào để làm dd dd và và v - điều hướng - theo đó là theo kiểu pv. Nó không cho biết làm thế nào để sao chép một dòng mà không xóa nó như được yêu cầu ở đây.
danielson317

Câu trả lời:


2769

yyhoặc Ysao chép dòng (ghi nhớ: y ank )
hoặc
ddđể d elete dòng (Vim bản những gì bạn đã xóa vào clipboard giống như "đăng ký", giống như một vết cắt hoạt động)

sau đó

pđể p aste sự sao chép hoặc xóa văn bản sau dòng hiện tại
hoặc
Pđể p aste văn bản sao chép hoặc xóa trước dòng hiện tại


129
Một điểm tuyệt vời. Vì một số lý do, tôi thấy việc đánh y hai lần nhanh hơn so với SHIFT-y
Mark Biek

25
@camflan Tôi nghĩ chữ Y nên "sao chép từ con trỏ đến cuối"
Dzung Nguyen

42
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

5
@nXqd: Có, một tỷ lệ lớn bản đồ người dùng Yđến y$. (Phù hợp với DC; (nhưng không tương thích với Vi (không ai quan tâm.))) Điều đó thậm chí còn được đề xuất trong :help Y.
Aaron Thoma

11
Để sao chép hai dòng, nó thậm chí còn nhanh hơn để đi yjhoặc yk, đặc biệt là khi bạn không nhân đôi một ký tự. Ngoài ra, yklà phiên bản ngược 2yykhông thể thực hiện được và bạn có thể đặt số lượng dòng để lùi về phía sau y9jhoặc y2k, v.v. Chỉ khác là số lượng của bạn phải có n-1trong tổng số ndòng, nhưng đầu của bạn có thể biết rằng dù sao.
zelk

406

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

Cách Ex :

  • :t. sẽ nhân đôi dòng,
  • :t 7 sẽ sao chép nó sau dòng 7,
  • :,+t0sẽ 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 :mthay 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 :ghoặc :v:

  • :v/foo/m$ sẽ di chuyển tất cả các dòng không khớp với mẫu Foovio đến cuối tập tin.
  • :+,$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 xxxngay sau con trỏ.

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


1
Khi bạn nhấn :trong chế độ trực quan, nó được chuyển thành '<,'>để nó chọn trước phạm vi dòng mà lựa chọn hình ảnh được kéo dài. Vì vậy, trong chế độ trực quan, :t0sẽ sao chép các dòng ở đầu.
Benoit

1
Đố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 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à các lệnh "Chế độ bình thường". Nếu bạn muốn sao chép / di chuyển / xóa một dòng hoặc phạm vi dòng xa, một lệnh Ex có thể nhanh hơn rất nhiều.
Niels Bom

7
Bị từ chối không phải do vấn đề với câu trả lời như vậy (mặc dù nó không hoạt động cho tình huống của tôi, tôi không biết số dòng tôi muốn nhân đôi) nhưng vì nó THỰC SỰ không phải là câu trả lời hàng đầu / được chấp nhận cho điều này câu hỏi thường gặp.
mjaggard

9
@mjaggard: câu trả lời được chấp nhận luôn đứng đầu, bất kể điểm số của họ là bao nhiêu. Có, tôi đã thêm câu trả lời đó như một sự bổ sung và có vẻ như nó rất phù hợp với OP.
Benoit

7
:t.là câu trả lời chính xác cho câu hỏi.
Burak Erdem

294

YPhoặc Yphoặc yyp.


Ythường được ánh xạ tới y$(yank (sao chép) cho đến hết dòng (từ vị trí con trỏ hiện tại, không bắt đầu dòng)). Với dòng này trong .vimrc::nnoremap Y y$
Aaron Thoma

1
Đừng quên người nghèoyyP
icc97

253

sao chép và dán vào 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

34
Bạn đã sử dụng gì để làm gif?
Zoltán

4
@ Zoltán bạn có thể sử dụng LiceCap, có kích thước nhỏ
onmyway133 23/2/2016

53

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

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


3
Cái này xuất hiện đầu tiên nhưng nó được chấp nhận trùng lặp: stackoverflow.com/a/73357/1438029
Geoffrey Hale

44

Làm cái này:

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


20
Đừng gõ khoảng trắng.
Niels Bom

1
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 2 dòng bên dưới dòng bạn đã kéo.

44

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

"ayy: Điều 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 atạ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 " Vim trợ giúp tập tin để vui hơn.


Cảm ơn, tôi đã sử dụng điều này như một liên kết: map <Leader> d "
ayy

39

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

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

y7yp


17
7yy tương đương với y7y và có lẽ dễ nhớ cách làm hơn.
Graywh

10
y7yp (hoặc 7yyp) hiếm khi hữu ích; con trỏ vẫn ở trên dòng đầu tiên được sao chép để p dán các dòng được sao chép giữa dòng thứ nhất và thứ hai của nguồn. Để nhân đôi một khối các dòng, sử dụng 7yyP
Nefrubyr

@Nefrubyr hoặc :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - dán sau

yyP - dán trước


6
Vì dòng đang được nhân đôi, kết quả cuối cùng của nội dung là như nhau.
Acumenus

4
@ABB Tuy nhiên, có một sự khác biệt thu nhỏ ở đây - con trỏ của bạn sẽ hạ cánh trên dòng nào.
Mikk

12

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


11

Bạn cũng có thể thử <Cx> <Cl> 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ư <Cp>


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

11

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ỏ.


10

Đối với một 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 ".
Đó thực sự là "dán ... sau / trước con trỏ ".

yyhoặc Yđể sao chép dòng
hoặc
dd xóa dòng

sau đó

pđể dán văn bản sao chép hoặc xóa sau khi các con trỏ
hoặc
Pdán văn bản sao chép hoặc xóa trước khi cá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 liên kết khóa hoàn chỉnh


3

1 gotcha: khi bạn sử dụng "p" để đặt dòng, nó sẽ đặt nó 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.


4
hoặc sử dụng vốn P - đặt trước
Ghoti

3

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


3

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>

các :copy lệnh chỉ bản dòng chọn hoặc phạm vi (luôn cả dòng) xuống dưới số dòng cho là đối số của nó.

Trong chế độ bình thường, cái này làm là copy . sao chép dòng này xuống ngay dưới dòng này .

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


1
Câu trả lời tốt nhất ở đây!

2

Đố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ặcP (dán trước).

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


1

Nếu bạn muốn sao chép một dòng và dán nó ngay bên dưới like hiện tại, giống như trong Sublime Ctrl+ Shift+ D, thì bạn có thể thêm dòng này vào .vimrctệp của mình .

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

Hoặc, đối với chế độ Chèn:

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


Điều này rời khỏi chế độ chèn mặc dù và chỉ cần thêm ivào cuối để nhập lại nó bị hỏng undo, vì vậy giải pháp sao chép các dòng trong chế độ chèn không tầm thường như vẻ ngoài của nó.
DarkWiiPlayer

Điều này hoạt động hoàn toàn tốt đối với tôi: imap <S-C-d> <Esc>Ypi chế độ chèn và nmap <S-C-d> <Esc>Ypở chế độ bình thường
jedi

0

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 YPlệnh gốc .

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.