6

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

4 回答 4

14

写第一行:

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

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

qayyp^Al^Aq

(请注意,开始和停止宏录制发生在q)现在播放宏110 次:

110@a
于 2009-05-21T23:03:20.863 回答
8

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

:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"')
:put=t
于 2009-05-22T02:00:35.437 回答
6

如果您拥有 Unix/Linux 核心实用程序,那么有一种方法更容易记住,至少在您习惯使用块命令的情况下:

(1) 使用 seq(1) 生成序列

:r!seq 200801 200812

seq 还允许像这样格式化:

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

百分号必须转义。

(2) 用 Vim 块命令将该块加倍:Mark with Cv, yank, put

(3) 在这些块之间插入(或附加)文本:用 CV 标记,用 I 插入

有关更多信息,请参阅 :help blockwise-visual。

于 2009-05-22T07:01:21.453 回答
2

另见Vimtip#150

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

于 2009-05-25T11:10:19.807 回答