• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            玩心未泯

            卡爾斯希普拉斯

            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 閱讀(2827) 評論(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
            或者可以考慮使用一些腳本語言  回復  更多評論
              

            久久久久久国产精品无码下载| 久久精品中文闷骚内射| 一级做a爰片久久毛片人呢| 久久亚洲国产中v天仙www | 国产精品99久久久久久猫咪| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产免费久久精品丫丫| 思思久久99热只有频精品66| 国产69精品久久久久9999APGF| 天天躁日日躁狠狠久久| 情人伊人久久综合亚洲| 久久久久99这里有精品10| 国产精品久久久久久影院| 偷窥少妇久久久久久久久| 伊人久久大香线蕉精品| 狠狠色狠狠色综合久久| 久久99精品国产麻豆婷婷| 久久国产精品成人片免费| 三级三级久久三级久久 | 大伊人青草狠狠久久| 人妻无码精品久久亚瑟影视| 久久精品人人做人人妻人人玩| 亚洲精品无码专区久久同性男| 日本道色综合久久影院| 久久精品国产清自在天天线| 久久五月精品中文字幕| 欧美伊人久久大香线蕉综合69| av国内精品久久久久影院| 色妞色综合久久夜夜| 精品伊人久久久| 国产精自产拍久久久久久蜜| 久久99国产综合精品| 久久精品人人做人人妻人人玩| 99精品国产99久久久久久97| 99精品国产免费久久久久久下载| 久久精品国产精品亚洲人人| 99久久精品国产一区二区| 色成年激情久久综合| 国内精品久久久久久不卡影院| 久久99精品久久久久久野外| 久久国产成人|