vim: Tôi có thể tạo * chỉ * y thực hiện một bản sao không?


11

Tôi đang học cách thích vim, nhưng một điều mà tôi chưa hoàn toàn chấp nhận là tình huống sao chép và dán. Trong một trình soạn thảo văn bản Muggle tôi sẽ Ctrl- Csao chép một đoạn văn bản và sau đó chỉnh sửa / xóa và sau đó dán văn bản vào một nơi khác. Tuy nhiên, trong vim tôi không thể làm điều này bởi vì sau khi tôi sao chép văn bản y, việc sửa đổi văn bản thường liên quan dxlàm mất đi văn bản gốc của tôi.

Có cách nào để thực hiện dxkhông sao chép văn bản? Hoặc nếu không, tôi nên sử dụng các tính năng vim này như thế nào?

Câu trả lời:


16

9 yanks trước được lưu trong các thanh ghi được gọi 1thông qua 9. Bạn có thể nhớ lại lần cuối cùng với "1p, lần trước với "2pvà v.v. Lệnh :reghiển thị các thanh ghi có sẵn để dán.

Nếu bạn muốn một cái yank tồn tại lâu hơn, hãy sử dụng một thanh ghi thư .

Đối với các lệnh liên quan đến yank khó hiểu hơn, hãy bắt đầu đọc :help "trong hướng dẫn.


2
Ngoài ra, đăng ký 0 chứa văn bản cuối cùng được kéo dài (trái ngược với xóa). Vì vậy, đề cập trở lại câu hỏi ban đầu, bạn có thể yank với y, tiếp tục chỉnh sửa bao gồm dx, và dán nội dung giật với"0p
Nefrubyr

@Nefrubyr, nhận xét của bạn ở trên thực sự là câu trả lời đơn giản nhất, nhưng nó không được đề cập trong bất kỳ câu trả lời nào trong ba câu trả lời hiện có. Có lẽ bạn nên thêm nó? (Tôi có thể nếu bạn không.)
Wildcard

9

Các lệnh bạn đang nói về việc sử dụng thanh ghi "không tên". Nó chỉ có nghĩa là để sử dụng rất ngắn hạn. "Tôi sẽ lấy cái này từ đây và đặt nó ở đằng kia".

Khi bạn muốn giữ một cái gì đó trong hơn một vài giây trong khi bạn đi và làm một cái gì đó khác, bạn nên sử dụng các thanh ghi có tên.

Chẳng hạn, " a y ysẽ kéo dòng con trỏ vào thanh aghi. Không có gì vô tình làm tắc nghẽn nó, trừ khi bạn gõ một lệnh khác liên quan đến thanh aghi. Vài phút, giờ, thậm chí vài ngày sau đó, bạn có thể nhập " a pđể thả bản sao được đánh dấu của dòng đó khỏi thanh aghi bên dưới con trỏ đang bật.

(Đối với điều này để làm việc thực sự tốt, bạn nên có một dòng như set viminfo='50,\"1000trong của bạn ~/.vimrctập tin, để cho nó để nhớ những thứ như nội dung đăng ký trên phiên Vim. Sau đó bạn có thể đi vào kỳ nghỉ giữa yank và đặt!)

Có 26 thanh ghi có tên (az). Nếu bạn đặt chúng dưới dạng chữ hoa thay vì như hình trên, bạn sẽ thêm vào nội dung đăng ký hiện tại thay vì thay thế chúng. Vì vậy, bạn có thể xây dựng một cái gì đó thực sự phức tạp, giả sử, đăng ký htừng mảnh một, sau đó đặt tất cả xuống cùng một lúc với " h p.

Lưu ý rằng tên đăng ký là tùy chọn. Điều này ngụ ý rằng có thể có nhiều lệnh bạn đã biết và sử dụng nơi bạn có thể đang sử dụng các thanh ghi có tên. Nói :help registerstrong Vim để có được một số ý tưởng về các khả năng.

Ngoài ra, có được một cốc Vi .


1

Nếu bạn cần xóa văn bản với d mà không thay đổi thanh ghi yank của bạn (giả sử, bạn đã kéo văn bản trong đó mà bạn chưa sẵn sàng để dán trước khi xóa một số văn bản khác chẳng hạn), bạn có thể sử dụng thanh ghi lỗ đen _ .

Nếu bạn làm "_ddví dụ, dòng hiện tại sẽ bị xóa ngay lập tức và bị lãng quên.

Trên thực tế, tôi không sử dụng đăng ký này rất thường xuyên. Nó không mất ít lần nhấn phím hơn là lưu vào thanh ghi mục đích chung (bất kỳ thanh ghi chữ cái nào) và nếu bạn lưu vào thanh ghi mục đích chung, ít nhất, các dòng mà bạn đã xóa vẫn có sẵn cho đến khi bạn ghi đè lên thanh ghi, nếu sự cần thiết phát sinh

Nếu bạn có xu hướng quên sử dụng một thanh ghi khác khi xóa, bạn có thể xác định một macro trình bao bọc ddchẳng hạn như thế này : :noremap dd "add.


0

Như đã được chỉ ra trong các ý kiến ​​cho câu trả lời được chấp nhận (hiện tại), cách hợp quy để làm điều này là sử dụng thanh ghi zero ( "0). Đăng ký số 0 luôn chứa lần cuối cùng và sẽ không bị ghi đè bởi dx, vì vậy, "0pluôn luôn đặt bất cứ thứ gì bạn đã rút ra bất kể những gì đã được chỉnh sửa trong thời gian đó.

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.