2010-10-21 10 views
7

Đôi khi tôi cần chèn một số dòng tương tự vào một tệp chỉ khác nhau về số thứ tự. Ví dụ,Làm cách nào để tối thiểu hóa các lần nhấn phím trong khi chèn các dòng tương tự trong vim?

print "func 1"; 
print "func 2"; 
print "func 3"; 
print "func 4"; 
print "func 5"; 

Sử dụng vim, tôi kết thúc copy dán dòng đầu tiên sử dụng [yypppp] và sau đó thay đổi bốn dòng cuối cùng. Điều này thực sự chậm nếu bạn có nhiều dòng chèn hơn.

Có cách nào nhanh hơn để thực hiện việc này trong thời gian không?


Một ví dụ của việc này là:

trạng thái ban đầu

boot(); 
format(); 
parse(); 
compare(); 
results(); 
clean(); 

cuối cùng nhà nước

print "func 1"; 
format(); 
print "func 2"; 
parse(); 
print "func 3"; 
compare(); 
print "func 4"; 
results(); 
print "func 5"; 
clean(); 

Trả lời

12

Ghi lại macro. Đây là quy trình làm việc cho ví dụ cụ thể của bạn:

Sao chép-dán dòng đầu tiên. Sau đó,

qa  : Start recording macro to register a 
yy  : Yank current line 
p  : Paste current line in line below 
/\d  : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number) 
C-A  : Control-A increments the number 
q  : Stop recording macro 
[email protected]  : Replay macro 3 times 

Bạn có thể thay thế 3 bằng bất kỳ số nào để tiếp tục tạo mới print dòng có số tăng dần.

Ví dụ thứ hai của bạn, bạn chỉ có thể thêm

j  : Moves one line down 

sau lệnh yy, để có được dòng lệnh và print 's xen kẽ.

+3

Bạn không thực sự cần phải thực hiện '/ [0-9] \ +', VIM Tự động di chuyển con trỏ đến số – Hasturkun

+0

@Hasturkun: Whoa, điều đó khá tuyệt. – Chetan

+0

Bạn có thể thay thế '/ [0-9] \ +' bằng '/ \ d' tốt hơn (bạn không cần lấy toàn bộ số vào một trận đấu, bạn chỉ cần đặt con trỏ lên một số, vì vậy' \ + 'là một quá mức cần thiết ở đây.' \ d' là một phím tắt cho '[0-9]'. Nó nhanh hơn, nhưng điều này không quan trọng ở đây. Nó cũng giảm thiểu số lượng phím cần nhấn.). – ZyX

1

Bạn có plugin làm điều đó. Ví dụ: visincr. Trực quan chọn cột số của bạn và chạy :I.

Một cách khác để thực hiện việc đó là ghi lại macro. chạy qx để bắt đầu ghi macro để đăng ký x, yiw để yank từ dưới con trỏ, j đi một dòng xuống, viwp để dán nó, CTRLMột để tăng số điện thoại mới, q để dừng ghi, và sau đó @x để phát lại nội dung của sổ đăng ký x.

0

Đối với trường hợp cụ thể này, bạn có thể sử dụng macro. Có một cách viết tốt về cách thực hiện các số thứ tự trong this post.

Bạn cần thay đổi ví dụ trong bài đăng để viết toàn bộ dòng đầu tiên và sau đó ghi lại macro sao chép dòng và cập nhật bộ đếm.