Yanking và dán trong khi tăng


13

Tôi đang chỉnh sửa tệp .sql trong Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

Những gì tôi đang tìm kiếm là kéo (1, 1),dây và dán nó 137 lần; tuy nhiên, tôi muốn số thứ hai trong ngoặc đơn được tăng lên mỗi lần. Đầu ra sẽ như sau:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

Có cách nào để làm điều đó trong Vim không và nếu có thì tôi sẽ sử dụng lệnh nào?

Cảm ơn!

Câu trả lời:


10

Đặt con trỏ của bạn trên (1, 1),dòng sau đó gõ:

qaVypt)<C-a>q135@a

Giải trình :

qabắt đầu ghi một macro bên trong thanh ghi a (bạn có thể chọn một chữ cái khác).

Vyp nhân đôi dòng hiện tại, bằng cách chọn toàn bộ dòng (V), sao chép nó (y) và sau đó dán nó bên dưới (p).

t) di chuyển con trỏ ngay trước dấu ngoặc đơn đóng tiếp theo để nó ở số thứ hai.

<C-a>( Ctrla) tăng số lượng.

q kết thúc ghi macro.

135@areplay vĩ mô được lưu trữ trong đăng ký một 135 lần.

Chỉnh sửa: Peter Rincker có một lệnh ngắn hơn:

qqYpW<c-a>q135@q

Sự khác biệt là:

nó sử dụng thanh ghi q để lưu trữ macro (gõ nhanh qqhơn qavì cùng một khóa),
nó sao chép dòng chỉ bằng một lần nhấn phím Y(thay vì hai Vy)
và nó di chuyển con trỏ đến số thứ hai chỉ bằng một lần nhấn phím W(thay vào đó của t)).


4
Vim golf : qqyypW<c-a>q135@q. Thậm chí ngắn hơn nếu bạn sử dụng Ythay vì yy.
Peter Rincker

9

Vims gần đây đã tìm hiểu về việc tăng các khu vực được chọn trực quan cũng như tạo ra một chuỗi. Vì vậy, bạn có thể làm điều này sau khi dán dòng của bạn 137 lần:

1) trực quan chọn khối ( Ctrl-V) thứ hai 1 bắt đầu từ dòng 3.

2) nhấn gCtrl-A

Tôi đã ghi lại một màn hình diễn viên ở đây

Tuyên bố từ chối trách nhiệm: Điều này cần Vim 7.4.900 hoặc hơn.


Đã thử nghiệm thành công trong Vim 7.4.826 trên Debian / sid.
Dubu

Screencast của bạn đã biến mất nhưng phương pháp này TUYỆT VỜI! Cảm ơn.
david_nash

2

Các dễ hiểu / dễ nhớ / dễ thích ứng với các tình huống khác cách để làm điều đó: sử dụng VisIncr plugin (nếu bạn muốn sử dụng một phiên bản mà thực sự đóng vai tốt đẹp với các nhà quản lý gói từ thế kỷ này như trái ngược với đối phó với vimballs , bạn có thể lấy nó từ GitHub ). Với nó:

  • đi đến (1, 1),dòng và kéo nó:Vy
  • dán nó 136 lần: 136p
  • đi đến cột thứ hai 1và đánh dấu theo chiều dọc:C-vGf)h
  • chạy tăng: :II
  • đọc hướng dẫn để tìm hiểu về các goodies khác : :help visincr.

1

Tôi sẽ chơi với g^a.

Hãy thử 137i0^v137kg^a.


1
Chào mừng đến với Vi và Vim ! Tôi đã định dạng câu trả lời của bạn bằng cách sử dụng markdown. Sẽ tốt hơn nữa nếu bạn chỉnh sửa để giải thích cách trả lời câu hỏi OP này.
D. Ben Knoble
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.