如果没有python或ruby,如何在Vim中获取计数器变量?

如果没有python或ruby,如何在Vim中获取计数器变量?,vim,macros,repeat,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 gzi

我没有启用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>...
yy11p1013r2r3r4。。。
换句话说,我将行再粘贴11次,然后使用“replace char”命令遍历日期列表。然后我将复制整个块,并在新块中键入

:s/2007/2008/<enter>12&11<up>12&
:s/2007/2008/12和1112&
在第二个街区用2007年代替2008年

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

写下第一行:

%macro(200701);x gzip /home/test/200701.txt;run;
然后,当仍在该行上时,进入命令模式并记录复制该行的宏a(
yyp
),递增第一个数字(ctrl-a,写入
^a
),向右移动一个字符(
l
),然后递增另一个数字:

qayyp^Al^Aq
(请注意,
q
会启动和停止宏录制)现在播放宏a 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核心实用程序,那么 这是一种更容易记住的方法,至少如果你习惯了使用 块命令:

yy11p10<up>13<right>r2<down>r3<down>r4<down>...
(1) 使用seq(1)生成序列

seq还允许如下格式:

:r!seq -f "\%03.0f"  10 121
百分号必须转义

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

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

有关更多信息,请参阅:帮助分块可视化。

另请参阅


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

+1 vim宏在进入它们时可能会有点吓人(尤其是读取其他宏代码),但它们在重复文本编辑任务上所能节省的工作量绝对令人难以置信。我认为,只要你对vim感到满意,并且知道录制和回放宏的命令,最好就开始尝试一下。谢谢!这是非常有效的!