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

            A狠狠久久蜜臀婷色中文网| 一本色综合网久久| 久久人人爽人人爽AV片| 婷婷久久综合| 九九99精品久久久久久| 久久亚洲AV永久无码精品| 热re99久久精品国99热| 久久精品亚洲男人的天堂| 精品综合久久久久久97| 国产精品va久久久久久久| 中文字幕无码免费久久| 国内精品久久久久久久久| 亚洲欧美伊人久久综合一区二区 | 国产午夜久久影院| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国内精品久久久久久久影视麻豆| 久久久午夜精品福利内容| 国产精品久久久久久久久| 波多野结衣久久| 久久av免费天堂小草播放| 久久精品国产亚洲AV高清热 | 99精品久久久久中文字幕| 午夜精品久久久久久影视riav| 久久精品国产免费一区| 午夜天堂精品久久久久| 狠狠色丁香久久婷婷综合_中| 91久久香蕉国产熟女线看| 久久久久免费精品国产| 久久婷婷国产综合精品| 久久无码AV一区二区三区| 天天综合久久一二三区| 亚洲国产精品无码久久青草| 久久国产热这里只有精品| 999久久久免费国产精品播放| 国产成人久久精品区一区二区| 天堂久久天堂AV色综合| 国内高清久久久久久| 伊人久久精品无码av一区| 亚洲中文字幕无码久久综合网| 中文精品久久久久人妻| 噜噜噜色噜噜噜久久|