2009-05-21 35 views
5

Tôi KHÔNG có kích hoạt python/ruby. Câu hỏi của tôi: Tôi thường phải viết những thứ như sau:Làm thế nào tôi có thể nhận được một biến truy cập trong Vim mà không cần python hoặc ruby?

%macro(200701);x gzip /home/test/200701.txt;run; 
%macro(200702);x gzip /home/test/200702.txt;run; 
%macro(200703);x gzip /home/test/200703.txt;run; 
%macro(200704);x gzip /home/test/200704.txt;run; 
%macro(200705);x gzip /home/test/200705.txt;run; 
%macro(200706);x gzip /home/test/200706.txt;run; 
%macro(200707);x gzip /home/test/200707.txt;run; 
%macro(200708);x gzip /home/test/200708.txt;run; 
%macro(200709);x gzip /home/test/200709.txt;run; 
%macro(200710);x gzip /home/test/200710.txt;run; 
%macro(200711);x gzip /home/test/200711.txt;run; 
%macro(200712);x gzip /home/test/200712.txt;run; 

%macro(200801);x gzip /home/test/200801.txt;run; 
%macro(200802);x gzip /home/test/200802.txt;run; 
%macro(200803);x gzip /home/test/200803.txt;run; 
%macro(200804);x gzip /home/test/200804.txt;run; 
%macro(200805);x gzip /home/test/200805.txt;run; 
%macro(200806);x gzip /home/test/200806.txt;run; 
%macro(200807);x gzip /home/test/200807.txt;run; 
%macro(200808);x gzip /home/test/200808.txt;run; 
%macro(200809);x gzip /home/test/200809.txt;run; 
%macro(200810);x gzip /home/test/200810.txt;run; 
%macro(200811);x gzip /home/test/200811.txt;run; 
%macro(200812);x gzip /home/test/200812.txt;run; 

Có cách nào nhanh chóng để làm điều này trong Vim?

Tôi thường sẽ gõ:

%macro(200701);x gzip /home/test/200701.txt;run; 

Sau đó dùng các lệnh sau:

yy11p10<up>13<right>r2<down>r3<down>r4<down>... 

Vì vậy, nói cách khác tôi dán dòng hơn 11 lần, sau đó sử dụng "thay char" lệnh chạy thông qua danh sách các ngày. Sau đó, tôi sẽ sao chép toàn bộ khối và trong khối mới sẽ nhập

:s/2007/2008/<enter>12&11<up>12& 

để thay thế 2007 cho năm 2008 trong khối thứ hai.

Vim chỉ mạnh mẽ như vậy con số đó phải có một cách tốt hơn sau đó liên tục thay thế bằng tay 1 đến 12 trên mỗi dòng.

Trả lời

13

Viết dòng đầu tiên:

%macro(200701);x gzip /home/test/200701.txt;run; 

Sau đó, trong khi vẫn trên dòng đó, đi vào chế độ lệnh và ghi lại một macro một rằng bản dòng (yyp), số gia số đầu tiên (Ctrl- một, được viết ^A), di chuyển một ký tự bên phải (l) và sau đó tăng số khác:

qayyp^Al^Aq 

(Lưu ý rằng khởi động và dừng ghi hình vĩ mô sẽ xảy ra với 0 .) Bây giờ chơi vĩ mô một 110 lần:

[email protected] 
+0

Macro vim +1 có thể hơi đáng sợ khi bạn vào chúng (đặc biệt là đọc mã vĩ mô của người khác), nhưng hoàn toàn không thể tin được số lượng công việc họ có thể lưu trên các tác vụ chỉnh sửa văn bản lặp đi lặp lại. Tôi nghĩ tốt nhất là nên đi sâu vào và thử nghiệm, một khi bạn cảm thấy thoải mái với vim và bạn biết các lệnh để ghi lại và phát lại các macro. –

+0

Cảm ơn bạn! Điều đó rất hiệu quả! – Dan

8

Nó cũng có thể được thực hiện với vim 7 chức năng:

:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"') 
:put=t 
6

Nếu bạn có các tiện ích lõi Unix/Linux tại bố trí của bạn có một cách dễ nhớ hơn, ít nhất nếu bạn quen với việc sử dụng lệnh chặn:

(1) Tạo chuỗi bằng cách sử dụng seq (1)

:r!seq 200801 200812 

seq cũng cho phép formating như thế này:

:r!seq -f "\%03.0f" 10 121 

Các ký hiệu phần trăm phải được thoát ra.

(2) đúp khối này với các lệnh khối Vim: Đánh dấu với Cv, yank, đặt

(3) Insert (hoặc thêm) văn bản giữa khối này: Đánh dấu với CV, chèn với tôi

Xem: trợ giúp theo chiều hướng trực quan để biết thêm.

2

Cũng xem Vimtip#150.

Điều này giải thích cách đánh dấu một khối văn bản và tự động tăng số trong khối được đánh dấu.

Các vấn đề liên quan