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

            91精品国产综合久久精品| 亚洲午夜无码AV毛片久久| 久久精品国产亚洲AV电影| 久久久噜噜噜久久熟女AA片| 99久久婷婷免费国产综合精品| 国产99久久九九精品无码| 久久天天躁狠狠躁夜夜avapp | 一本大道久久香蕉成人网| 久久人人爽人人爽人人爽| 2020久久精品国产免费| 四虎国产精品成人免费久久| 日韩精品久久久久久免费| 久久93精品国产91久久综合| 囯产极品美女高潮无套久久久| 国产AV影片久久久久久 | 国产L精品国产亚洲区久久| 久久无码AV中文出轨人妻| 久久精品无码一区二区三区| 久久久午夜精品福利内容| 国内精品久久久久久不卡影院| 蜜臀av性久久久久蜜臀aⅴ麻豆| 午夜精品久久久久久影视777| 国产精品久久久久久一区二区三区 | 99久久er这里只有精品18| 亚洲精品久久久www| 狠狠色丁香婷婷综合久久来来去| 亚洲AV无码久久精品成人| 久久夜色精品国产噜噜亚洲a| 久久激情亚洲精品无码?V| 久久久国产精品网站| 久久91精品国产91久久户| 97久久精品人妻人人搡人人玩| 久久久久久久久久久| 久久精品免费一区二区| 久久精品国产亚洲av麻豆蜜芽| 国产精品99久久久精品无码| 亚洲欧洲中文日韩久久AV乱码| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 综合久久国产九一剧情麻豆| 久久免费看黄a级毛片| 久久无码高潮喷水|