如何在没有python或ruby的情况下在Vim中获得计数器变量?

时间:2009-05-21 22:51:20

标签: vim macros repeat

我没有启用python / 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;

在Vim中有快速的方法吗?

我通常会输入:

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

然后发出以下命令:

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

换句话说,我将行11粘贴多次,然后使用“替换字符”命令运行日期列表。然后我将复制整个块,并在新块中输入

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

在第二个区块中替换2007年的2008年。

Vim非常强大我认为必须有更好的方法,然后在每条线上不断手动替换1到12。

4 个答案:

答案 0 :(得分:13)

写下第一行:

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

然后,当仍然在该行上时,进入命令模式并记录一个复制行(yyp)的宏 a ,增加第一个数字(ctrl-a,written { {1}}),向右移动一个字符(^A),然后递增另一个字符:

l

(请注意,使用qayyp^Al^Aq 启动和停止宏录制。)现在播放宏 a 110次:

q

答案 1 :(得分:8)

也可以使用vim 7函数完成:

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

答案 2 :(得分:6)

如果你有处理的Unix / Linux核心实用程序 一种更容易记住的方式,至少在您习惯使用时 阻止命令:

(1)使用seq(1)

生成序列
:r!seq 200801 200812

seq还允许这样形成:

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

必须转义百分号。

(2)使用Vim块命令将此块加倍: 用C-v标记,猛拉,放

(3)在这些块之间插入(或追加)文本: 用C-V标记,插入I

请参阅:帮助blockwise-visual获取更多信息。

答案 3 :(得分:2)

另见Vimtip#150

这解释了如何标记文本块并自动增加标记块中的数字。