Vim: làm thế nào để dán một khối văn bản ở cuối nhiều dòng?


32

Nói rằng tôi có một khối văn bản như thế này:

// Nhận xét1
// Nhận xét2
// Nhận xét3

Và tôi muốn nối từng dòng này vào cuối 3 dòng mã tương ứng:

foo = 1;
thanh = 2;
baz = 3;

Vì vậy, kết quả cuối cùng là

foo = 1; // Nhận xét1
thanh = 2; // Nhận xét2
baz = 3; // Nhận xét3

Có một cách dễ dàng để làm điều này trong Vim?


@Flimzy, tiếc là không. Thỉnh thoảng các bình luận như của bạn xuất hiện trong các câu hỏi của Vim, nhưng hãy kiểm tra điều này: meta.stackexchange.com/q/25925/160504
sidyll

Cộng đồng tốt hơn cho câu hỏi này là vi.stackexchange.com
thinwybk

Câu trả lời:


36

Sử dụng chế độ khối trực quan ( Ctrl+ v) để chọn một bộ dòng, sau đó yhoặc dchúng.

Sau đó, nếu bạn đã chọn các dòng foo, bar, baz, hãy sử dụng lại chế độ khối trực quan để chọn cột đầu tiên của các dòng bình luận và sau đó Shift+ pchúng vào vị trí (hoặc nếu bạn đã chọn các dòng bình luận, hãy chọn cột cuối cùng của thanh foo dòng và pchúng vào vị trí.

Việc nắm bắt vị trí có thể cần một chút luyện tập, nhưng khi bạn có sở trường, bạn sẽ bay. Khi bạn đã chọn một khối, bạn cũng có thể sử dụng Shift+ Ađể nối thêm các khoảng trắng vào khối (khi nối thêm, văn bản mới sẽ chỉ xuất hiện ở dòng trên cùng, nhưng khi bạn nhấn esc, nó sẽ xuất hiện một cách kỳ diệu trong tất cả các dòng được chọn) . Tương tự, Shift+ isẽ làm tương tự ở đầu khối được chọn trên mỗi dòng.

Bạn sẽ cần phải dọn sạch các dòng trống sau đó.

Ngoài ra còn có một tập vimcasts tuyệt vời cho thấy các kỹ thuật này chi tiết hơn.


1
Tôi thấy giải pháp này kết hợp với :set ve=allrất linh hoạt. Cá nhân tôi sử dụng plugin UnconditablePaste ( vim.org/scripts/script.php?script_id=3355 ) vì nó phù hợp với nhu cầu của tôi hơn một chút.
Peter Rincker

1

Vâng, nếu nó dễ dàng hay không, bạn nói với tôi. Điều hướng đến // Comment 1, nhấn ddđể xóa. Điều hướng đến dòng với foo = 1;và nhấn p, để dán vào bên dưới dòng. Di chuyển lên foomột lần nữa và nhấn Jđể tham gia hàng. Tada.


0

Sau đây sẽ làm chính xác những gì bạn mô tả:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

Tùy thuộc vào những gì bạn thực sự cần làm (trái ngược với ví dụ), trong thực tế, có thể đơn giản hơn để chọn khối "// Comment1", v.v. ( Ctrlvyank ( y), đi đến cuối mã chặn và dán.

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.