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

            亚洲精品国精品久久99热一| 久久久久久久亚洲Av无码| 国内精品伊人久久久久AV影院| 乱亲女H秽乱长久久久| 亚洲国产精品久久66| 午夜视频久久久久一区 | 国产一区二区三区久久| 国产999精品久久久久久| 久久婷婷五月综合97色直播| 久久99久久99小草精品免视看| 久久久久无码专区亚洲av| 久久精品国产亚洲av影院| 久久久久国产一区二区三区| 精品久久人妻av中文字幕| 综合久久一区二区三区| 久久久久久国产精品无码下载| 97精品依人久久久大香线蕉97| 久久九九亚洲精品| 日韩精品久久久肉伦网站| 亚洲午夜久久久| 精品久久久无码中文字幕| 久久91精品国产91久久户| 亚洲av成人无码久久精品| 中文字幕久久亚洲一区| 国产三级观看久久| 2020最新久久久视精品爱| 国产午夜免费高清久久影院| 亚洲国产另类久久久精品| 亚洲国产视频久久| 欧美日韩精品久久久免费观看| 国产精品日韩深夜福利久久| 99久久国产热无码精品免费久久久久| 亚洲精品无码久久久影院相关影片| 中文字幕久久精品| 久久精品国产99国产精品亚洲| 久久亚洲精品无码aⅴ大香| 一级a性色生活片久久无| 久久精品国产亚洲AV忘忧草18| 亚洲国产高清精品线久久| 久久久久av无码免费网| 亚洲综合日韩久久成人AV|