Text 使用宏进行文本编辑

Text 使用宏进行文本编辑,text,macros,text-editor,Text,Macros,Text Editor,我遇到的情况是,我必须通过一些小的编辑来重复一行文本。 例如: 1.将值(val_1,val_2)插入表名称(col_1,col_2) 2.将值(val_3,val_4)插入表名称(col_1,col_2) 3.将值(val_5,val_6)插入表名称(col_1,col_2) 等等(1000条记录) 我的意思是,我只会键入第一个查询,然后使用文本编辑器编写一个宏来生成所需数量的查询。 希望你能理解 为此,请建议更好的文本编辑器。正如我已经尝试过的那样,Ultraedit/Textpad失败了

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

例如:
1.将值(val_1,val_2)插入表名称(col_1,col_2)
2.将值(val_3,val_4)插入表名称(col_1,col_2)
3.将值(val_5,val_6)插入表名称(col_1,col_2)
等等(1000条记录)

我的意思是,我只会键入第一个查询,然后使用文本编辑器编写一个宏来生成所需数量的查询。 希望你能理解


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

选择Vim或Emacs。Emacs提供宏和正则表达式,所以你应该能够做你想做的事情。但可能不明显。

选择Vim或Emacs。Emacs提供宏和正则表达式,所以你应该能够做你想做的事情。但是可能不明显。

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

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

这里的编辑器可能是错误的工具-如果要生成所有这些insert语句,最好用perl或python之类的脚本语言编写一个小程序。

这里的编辑器可能是错误的工具-如果要生成所有这些insert语句,您最好用perl或python之类的脚本语言编写一个小程序。

几乎任何文本编辑器都可以让您复制和编辑行,当然是vim

解决这一问题的正确方法是通过编程实现:创建一个生成所需文本文件的模板文件。m4是一种广泛使用的宏语言,非常适合此任务,因为您可以自由混合文本和宏。比照

例如(未经测试)

定义(`txt`,“$1.插入表名(第一列,第二列)值(val_u$2,val_u$3);”) forloop(`i',11000,txt(i,eval(2*i-1),eval(2*i)))
几乎任何文本编辑器都可以让您复制行并编辑它们,当然是vim

解决这一问题的正确方法是通过编程实现:创建一个生成所需文本文件的模板文件。m4是一种广泛使用的宏语言,非常适合此任务,因为您可以自由混合文本和宏。比照

例如(未经测试)

定义(`txt`,“$1.插入表名(第一列,第二列)值(val_u$2,val_u$3);”) forloop(`i',11000,txt(i,eval(2*i-1),eval(2*i)))
对于只更改数字的示例,应该可以使用编辑器和宏脚本进行更改。例如,这个脚本做了一些非常类似的事情

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


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

对于只更改数字的示例,应该可以使用编辑器和宏脚本进行更改。例如,这个脚本做了一些非常类似的事情

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


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

我之所以发布这篇文章,是因为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
;;首先将宏中用于计数的特殊变量设置为初始值1
C-x C-k C-C 1
;;键入文本,但用以代替数字
;; 插入计数变量的值并自动将其递增1
在表名称(列一、列二)中插入值(val、val)
;;重复你的宏1000次。
M-1000 C-x C-e

我之所以发布这篇文章,是因为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
;;首先将宏中用于计数的特殊变量设置为初始值1
C-x C-k C-C 1
;;键入文本,但用以代替数字
;; 插入计数变量的值并自动将其递增1
在表名称(列一、列二)中插入值(val、val)
;;重复你的宏1000次。
M-1000 C-x C-e

这就是我现在使用python所做的。但这是一个相当普遍的问题。必须有一种更快的方法。这就是我现在使用python所做的。但这是一个相当普遍的问题。一定有更快的方法。我对Vim/Emacs不太满意。你能给我发一个链接吗?@user258321查看我的答案,了解如何专门使用emacsI实现这一点。我对Vim/Emacs不太熟悉。你能给我发一个链接吗?@user258321查看我的答案,了解如何专门使用emacs来实现这一点