宏这个概念可能让我解释我可能还解释不清楚,我自己的理解,就是把一组操作集成在一起。以前玩泥巴的时候有alias,后来玩UO可以自己定义动作组合,我想这些都应该算是宏的范围吧。其实要看它的定义也简单,帮助一开就出来了,不过懒得查了。
VS中的宏功能是我一直没有用过的,昨天碰巧碰到个事情,要修改一个4万8千多行的文件,这个超大文件还只是这个project中的最大的一个,还有另外几个加起来估计也有好几万行,而修改的东西其实不多,可以说是很多种替换操作的集合就可以完成的。开始的时候还耐着性子,搜索、拷贝、粘贴、键入,不厌其烦,一个多小时也才改了上千行而已,改得手酸,眼花@@,郁闷到极点。
经过这一阶段,发现了一些规律,我想到了用宏来帮我解决问题,宏的脚本咱又不会写,怎么弄呢?嘿,说白了就当一种语言,能难到哪里去?于是就开始动手了,用vs的录制宏功能,先把一些操作录一遍,然后看看生成的脚本,用单引号“'”来表示注释,字符串用引号引起来,字符串中有引号时,多加一个引号来转义,脚本都是以"ActiveDocument.Selection打头的,下面举个简单的例子:
Sub AddToDo() 'DESCRIPTION: Add //TODO at the selected position.
ActiveDocument.Selection.StartOfLine ActiveDocument.Selection = " //ToDo : Add Code Here!" ActiveDocument.Selection.NewLine ActiveDocument.Selection.LineUp dsMove, 1 ActiveDocument.Selection.LineDown dsExtend, 1 ActiveDocument.Selection.ReplaceText "ToDo", "TODO" ActiveDocument.Selection.LineDown dsMove, 1
End Sub
|
上面的脚本实现什么功能呢?就是在光标所在行输入" //ToDo : Add Code Here!"并输入换行,然后再选中刚才输入的一行,并将其中的ToDo替换为TODO,然后再把光标停留在该行注释的下面一行。
LineUp和LineDown就是上移和下移行了,后面可以接dsMove, xx或者dsExtend, xx,其中xx表行数,而dsMove只是移动,dsExtend移动的同时选中(效果等同于按住鼠标左键拖几行或者是按下Shift上下移动几行)。左右移动几个字符的话,使用CharLeft和CharRight,dsMove和dsExtend用法相同。
ReplaceText就是替换文本了,用双引号“”引起文本内容,替换前的和要替换成的文本用逗号“,”分隔。
StartOfLine就是移动光标到行的开头,如果是行的首个有效字符,可以在后面加上dsFirstText。对应的行尾是EndOfLine。
要在光标处输入文本,直接用 = 引导要输入的文本,文本用双引号“”引起。
NewLine表示换行。
'DESCRIPTION一行是以注释的形态存在的,但是却是有作用的,你在Macro设置中能够看到后面接的描述信息。
基本上掌握了这些语句就能组合出很多功能了,然后再给你的常用的Macro设置快捷键,或者是在ToolBar上显示一个按钮。咱也就是用了这么些语句实现了48000多行代码的修改,改完了一看有57000多行了,nndx,还好是有宏帮忙,这要真的是用手改不知道要改到什么时候去,难怪之前作这个工作的女孩子说至少要改5天呢。
宏应该还有很多高级的功能,想想以前咱为了实现一些辅助的功能还跑去写个什么vs的插件什么的,其实好多事情宏就能够解决问题了。大家可以继续往深处探索探索,让宏成为你的好助手。CodeProject上应该有不少高人们写的比较有用的宏,建议看完本文入门之后就可以去找这些例子来研究了~:P