玩心未泯

卡尔斯希普拉斯

C++博客 首页 新随笔 联系 聚合 管理
  19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
        宏这个概念可能让我解释我可能还解释不清楚,我自己的理解,就是把一组操作集成在一起。以前玩泥巴的时候有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
posted on 2007-06-29 13:25 SuperPlayeR 阅读(2787) 评论(2)  编辑 收藏 引用 所属分类: C/C++

评论

# re: 用VS中的宏(Marco)功能来帮助你工作 2007-06-30 10:30 nick
如果是一些简单的替换操作. 可以考虑用 regex. 随便 vc IDE 的 regex 语法有些怪异  回复  更多评论
  

# re: 用VS中的宏(Marco)功能来帮助你工作 2007-07-01 21:43 sttx
Don't Repeat Yourself
或者可以考虑使用一些脚本语言  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理