使用宏编辑文本

时间:2010-01-25 12:02:59

标签: text macros text-editor

我遇到了一些情况,我必须通过一些小的编辑来重复单行文本。

例如:
1.插入table_name(col_one,col_two)值(val_1,val_2);
2.插入table_name(col_one,col_two)值(val_3,val_4);
3.插入table_name(col_one,col_two)值(val_5,val_6);
等等......(1000条记录)

我的意思是,我只会输入第一个查询并使用文本编辑器编写宏来生成所需数量的查询。 希望你能得到这张照片。

请为此目的建议更好的文本编辑器。正如我已经尝试过并使用Ultraedit / Textpad失败了。也许我做错了什么,因为我也让Vim这么做。

6 个答案:

答案 0 :(得分:1)

对于仅给出数字变化的示例,使用Zeus编辑器和宏脚本应该可以实现。例如,这个numbers脚本做了类似的事情。

要获得所需的结果,请从上面获取数字脚本并进行一些小的更改,以创建奇数偶数脚本。

然后列标记奇数列的1000行并运行奇数脚本。然后列标记偶数列的1000行并运行偶数脚本。

答案 1 :(得分:0)

选择是Vim或Emacs。例如。 Emacs提供宏和正则表达式,因此您应该能够做您想做的事情。可能不明显。

答案 2 :(得分:0)

我认为如果使用shell脚本生成文本而不是文本编辑器中的宏,问题可能会更容易解决。

答案 3 :(得分:0)

编辑器可能是错误的工具 - 如果你想生成所有这些插入语句,你最好用脚本语言编写一个小程序,比如perl或python。

答案 4 :(得分:0)

几乎任何文本编辑器都可以让你复制行并编辑它们,当然是vim。

解决此问题的正确方法是以编程方式执行此操作:创建一个生成所需文本文件的模板文件。 m4是一种广泛使用的宏语言,非常适合这项任务,因为你可以自由地混合文本和宏。参看http://en.wikipedia.org/wiki/M4_(computer_language)

E.g。 (另)

define(`txt`, "$1. insert into table_name (col_one, col_two) values (val_$2, val_$3);")
forloop(`i',1,1000,txt(i,eval(2*i-1),eval(2*i)))

答案 5 :(得分:0)

我发布这个是因为OP在其中一条评论中要求提供关于如何在Vim或Emacs中完成此操作的链接

;; First set a special variable used for counting in macros to an initial value of 1
C-x C-k C-c 1  

;;type your text but use <C-x C-k C-i> in place of the numbers
;;<C-x C-k C-i> inserts the value of the counting var and automatically increments it by 1
insert into table_name (col_one, col_two) values (val_<C-x C-k C-i>, val_<C-x C-k C-i>)

;;repeat your macro 1000 times.
M-1000 C-x C-e