我没有启用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;
然后发出以下命令:
yy11p1013 r2 r3 r4 ...
换句话说,我将行11粘贴多次,然后使用"替换字符"命令运行日期列表.然后我将复制整个块并在新块中输入
:s/2007/2008/12&11 12&
在第二个区块中替换2007年的2008年.
Vim是如此强大,我认为必须有一个更好的方法,然后在每条线上不断手动替换1到12.
写第一行:
%macro(200701);x gzip /home/test/200701.txt;run;
然后,当仍然在该行时,进入命令模式并记录一个复制行()的宏ayyp
,递增第一个数字(ctrl-a,写入^A
),向右移动一个字符(l
)然后递增另一个数字:
qayyp^Al^Aq
(需要注意的是启动和停止宏录制有发生q
.)现在玩宏一 110倍:
110@a
它也可以用vim 7函数完成:
:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"') :put=t
如果您的处置中有Unix/Linux核心实用程序,那么有一种更容易记住的方法,至少如果您习惯使用块命令:
(1)使用seq(1)生成序列
:r!seq 200801 200812
seq还允许这样格式化:
:r!seq -f "\%03.0f" 10 121
必须转义百分号.
(2)使用Vim块命令将此块加倍:用Cv,yank,put标记
(3)在这些块之间插入(或附加)文本:用CV标记,插入I
请参阅:帮助blockwise-visual了解更多信息.