<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        [轉載]Vim技巧

        來源:懂視網 責編:小采 時間:2020-11-09 07:29:19
        文檔

        [轉載]Vim技巧

        [轉載]Vim技巧:如何將一串十進制數字轉換為 16 進制數字,使用 VIM 完成轉換的最簡單方法如下: :%s//d/+//=printf(%X, submatch(0))/g 這條命令的原理是,把一串數字,用 printf() 函數的輸出替換掉, printf() 函數輸出的正是這串數字的 16 進制形式。 分解如下
        推薦度:
        導讀[轉載]Vim技巧:如何將一串十進制數字轉換為 16 進制數字,使用 VIM 完成轉換的最簡單方法如下: :%s//d/+//=printf(%X, submatch(0))/g 這條命令的原理是,把一串數字,用 printf() 函數的輸出替換掉, printf() 函數輸出的正是這串數字的 16 進制形式。 分解如下

        如何將一串十進制數字轉換為 16 進制數字,使用 VIM 完成轉換的最簡單方法如下: :%s//d/+//=printf(%X, submatch(0))/g 這條命令的原理是,把一串數字,用 printf() 函數的輸出替換掉, printf() 函數輸出的正是這串數字的 16 進制形式。 分解如下: %s 在

        如何將一串十進制數字轉換為16進制數字,使用VIM完成轉換的最簡單方法如下:

        :%s//d/+//=printf("%X", submatch(0))/g

        這條命令的原理是,把一串數字,用printf()函數的輸出替換掉,printf()函數輸出的正是這串數字的16進制形式。

        分解如下:

        %s 在整個文件中替換 (:help :s )
        /d/+ 匹配一個或多個數字 (:help //d :help //+ )
        /= 使用表達式的結果進行替換 (:help //w )
        printf 按指定格式輸出 (:help printf() )
        submatch() 返回:s命令中的指定匹配字符串 (:help submatch() )
        g 替換行內所有出現的匹配 (:help :s_flags)

        看來,替換命令的巧妙使用可以完成很多意想不到的功能!

        下面這個技巧是在VIM郵件列表中看到的,非常實用。

        這里以編寫C語言程序為例, 假設,我們最終想完成的代碼如下:

        #define BIT_MASK_1 (1 << 0)
        #define BIT_MASK_2 (1 << 1)
        #define BIT_MASK_3 (1 << 2)
        #define BIT_MASK_4 (1 << 3)
        #define BIT_MASK_5 (1 << 4)
        #define BIT_MASK_6 (1 << 5)
        #define BIT_MASK_7 (1 << 6)
        #define BIT_MASK_8 (1 << 7)
        #define BIT_MASK_9 (1 << 8)
        #define BIT_MASK_10 (1 << 9)
        #define BIT_MASK_11 (1 << 10)
        #define BIT_MASK_12 (1 << 11)
        #define BIT_MASK_13 (1 << 12)
        #define BIT_MASK_14 (1 << 13)
        #define BIT_MASK_15 (1 << 14)
        #define BIT_MASK_16 (1 << 15)
        #define BIT_MASK_17 (1 << 16)
        #define BIT_MASK_18 (1 << 17)
        #define BIT_MASK_19 (1 << 18)
        #define BIT_MASK_20 (1 << 19)
        #define BIT_MASK_21 (1 << 20)
        #define BIT_MASK_22 (1 << 21)
        #define BIT_MASK_23 (1 << 22)
        #define BIT_MASK_24 (1 << 23)
        #define BIT_MASK_25 (1 << 24)
        #define BIT_MASK_26 (1 << 25)
        #define BIT_MASK_27 (1 << 26)
        #define BIT_MASK_28 (1 << 27)
        #define BIT_MASK_29 (1 << 28)
        #define BIT_MASK_30 (1 << 29)
        #define BIT_MASK_31 (1 << 30)
        #define BIT_MASK_32 (1 << 31)

        我們不需要一行一行的去寫,只需要先寫好第一行,如下:

        #define BIT_MASK_1 (1 << 0)

        然后,我們回到Normal模式,在這一行上輸入“Y31p",拷貝此行,然后粘貼31次。這樣,我們得到總共32行上面的內容。
        現在使用"V31j"命令選中這32行,然后使用兩次替換命令:

        :'<,'>s/BIT_MASK_/zs/d*/ze//=line(".") - line("'<") + 1
        :'<,'>s//zs/d*/ze)$//=line(".")-line("'<")

        這樣,我們就得到了我們想要的結果。
        這種方式還可以用于數組下標的自動增加,以及文本的章節自動編號等功能。只要你能夠用正則表達式準確的定位出你想要自動編號的的數字,那么就可以使用這種方法來自動編號。

        以第一條命令為例,第二條命令和第一條命令類似:

        :'<,'>s/BIT_MASK_/zs/d*/ze//=line(".") - line("'<") + 1

        這條命令在我們選中的區域內進行替換,查找以“BIT_MASK_”開頭,后面跟任意多個數字的字符串,并把匹配位置放在數字上,然后使用后面表達式計算出來的數字替換這些匹配的數字。
        下面是這條命令中每個元素的含義:

        '<,'> 我們所選中的區域 (:help '<,:help '> )
        s 在選中的區域中進行替換 (:help :s )
        /zs 指明匹配由此開始 (:help //zs )
        /d* 查找任意位數的數字 (:help //d )
        /ze 指明匹配到此為止 (:help //ze )
        /= 指明后面是一個表達式 (:help :s/= )
        line(".") 當前光標所在行的行號 (:help line() )
        line("'<") 我們所選區域中第一行的行號 (:help line() )

        “'<”和“'>”是我們使用了“v”,“V”命令選中一個visual區域后,VIM設置的標記,分別用來標識visual區域的開始和結束。
        “BIT_MASK_/zs/d*/ze”是一個正則表達式,用來查找以“BIT_MASK_”開頭,后面跟任意多個數字的字符串。其中“/zs”、“/ze”用來指定匹配的開始和結束位置,因為我們只打算替換“BIT_MASK_0”中的數字,所以在查找時只把匹配區域置在數字上。
        由于我們的替換操作要把不同行的數字替換成不同的值,所以在這里需要使用一個表達式來計算出替換后的值。當“:s”命令的替換字符串是以“/=”開頭時,表明使用一個表達式計算的結果進行替換。我們這里的表達式就是“line(".") - line("'<") + 1”,其中“line()”函數用來獲得行號,它可以獲得當前行的行號,以及指定的標記(mark)所在的行號。“line(".")”用來獲得當前光標所在行的行號,“line("'<")”則用來獲得“'<”標記所在行的行號。這兩個行號的差加上1就是我們想替換的值。

        在上面的例子中,我們使用VIM的替換功能,實現高效的代碼編寫。現在介紹另外一種方法,實現相同的功能。

        我們先看例子:

        UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
        Parent = lview.focusedItem.subItems.opIndex(0).text;
        Children = lview.focusedItem.subItems.opIndex(0).text;
        login = lview.focusedItem.subItems.opIndex(1).text;
        txtCust.text = lview.focusedItem.subItems.opIndex(2).text;
        txtProj.text = lview.focusedItem.subItems.opIndex(3).text;
        txtbDate.text = lview.focusedItem.subItems.opIndex(4).text;
        txtdDate.text = lview.focusedItem.subItems.opIndex(5).text;
        txteDate.text = lview.focusedItem.subItems.opIndex(6).text;
        txtPM.text = lview.focusedItem.subItems.opIndex(7).text;
        txtLang.text = lview.focusedItem.subItems.opIndex(8).text;
        txtVendor.text = lview.focusedItem.subItems.opIndex(9).text;
        txtInvoice.text = lview.focusedItem.subItems.opIndex(10).text;
        txtPMFund.text = lview.focusedItem.subItems.opIndex(11).text;
        txtProjFund.text= lview.focusedItem.subItems.opIndex(12).text;
        txtA_No.text = lview.focusedItem.subItems.opIndex(13).text;
        txtNotes.text = lview.focusedItem.subItems.opIndex(14).text;
        txtStatus.text = lview.focusedItem.subItems.opIndex(15).text;

        我們要把上面代碼中括號中的數字,替換成由0開始的一個順序遞增序列,例如:

        UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
        Parent = lview.focusedItem.subItems.opIndex(1).text;
        Children = lview.focusedItem.subItems.opIndex(2).text;
        ……

        實現以上需求,除了用前面介紹的方法外,還可以用下面的命令:

        :let n=0 | g/opIndex(/zs/d/+/s///=n/|let n+=1


        下面簡單講解一下這條命令各個組成元素:

        let 為變量賦值 (:help let )
        | 用來分隔不同的命令 (:help :bar )
        g 在匹配后面模式的行中執行指定的ex命令 (:help :g )
        /zs 指明匹配由此開始 (:help //zs )
        /d/+ 查找1個或多個數字 (:help //d )
        s 對匹配模式進行替換 (:help :s )
        /= 指明后面是一個表達式 (:help :s/= )

        所以,這條命令的執行過程為:
        1. 給變量n賦值為0;
        2. 查找模式” opIndex(/zs/d/+”,使用變量n的值替換匹配的模式字符串;
        3. 給變量n加1;

        需要說明一下”|”,它用來分隔不同的命令。
        另外,在substitute命令中,如果省略匹配模式字符串,它會使用之前定義的匹配模式字符串,在本例中就是由”global”命令定義的”opIndex(/zs/d/+”。

        除了上面介紹的方法外,還有一個VIM插件專門實現數字、日期等的增、減,可以在下面的網址下載此插件:
        http://vim.sourceforge.net/scripts/script.php?script_id=670

        http://mysite.verizon.net/astronaut/vim/index.html#VISINCR

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        [轉載]Vim技巧

        [轉載]Vim技巧:如何將一串十進制數字轉換為 16 進制數字,使用 VIM 完成轉換的最簡單方法如下: :%s//d/+//=printf(%X, submatch(0))/g 這條命令的原理是,把一串數字,用 printf() 函數的輸出替換掉, printf() 函數輸出的正是這串數字的 16 進制形式。 分解如下
        推薦度:
        標簽: 轉換 技巧 如何
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top 主站蜘蛛池模板: 在线观看亚洲AV日韩AV| 日本成人免费在线| 国产亚洲情侣一区二区无| 久久久久亚洲AV无码去区首| 最近最新MV在线观看免费高清| 亚洲人成影院午夜网站| 91免费精品国自产拍在线不卡| 亚洲欧洲日韩极速播放| 毛片免费在线视频| 亚洲av色香蕉一区二区三区蜜桃| 免费无码又爽又高潮视频| 亚洲国产精品无码久久| 免费人成激情视频| jizz在线免费观看| 亚洲成a人片在线观看无码| 久操免费在线观看| 亚洲不卡1卡2卡三卡2021麻豆| 国产成人午夜精品免费视频| 亚洲国产无线乱码在线观看 | 婷婷久久久亚洲欧洲日产国码AV| 72pao国产成视频永久免费| 国产AV无码专区亚洲精品| 免费无遮挡无码永久视频| 亚洲一区电影在线观看| www.亚洲精品| 男的把j放进女人下面视频免费| 亚洲精品中文字幕乱码| 成年人免费观看视频网站| 一级毛片aa高清免费观看| 亚洲av色福利天堂| 在线观着免费观看国产黄| 国产在线观a免费观看| 亚洲人成伊人成综合网久久| 国产高清免费在线| 久久久久久影院久久久久免费精品国产小说 | 亚洲激情视频在线观看| 毛片免费vip会员在线看| 九九久久国产精品免费热6| 久久亚洲中文字幕精品有坂深雪 | 亚洲国产av玩弄放荡人妇| 亚洲日韩国产一区二区三区|