邋遢居

          我的Java天堂

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

          刪除空行

          g/^\s*$/d                  : delete all blank lines

           

          這個里面使用了“:g”命令,Google了一下,找到了如下描述:

          :g is something very old and which is very powerful. I just wanted to illustrate the use of it
          with some examples. Hope, it will be useful for someone.
          Brief explanation for ":g"
          -------------------------
          Syntax is:
              :[range]:g/<pattern>/[cmd]
          You can think the working as, for the range (default whole file), execute
          the colon command(ex) "cmd" for the lines matching <pattern>. Also, for all
          lines that matched the pattern, "." is set to that particular line (for
          certain commands if line is not specified "." (current line) is assumed).
          Some examples
          -------------
          Display context (5 lines) for all occurences of a pattern
              :g/<pattern>/z#.5
              :g/<pattern>/z#.5|echo "=========="
              << same as first, but with some beautification >>
          Delete all lines matching a pattern
              :g/<pattern>/d
          Delete all blank lines (just an example for above)
              :g/^\s*$/d
          Double space the file
              :g/^/pu =\"\n\"
              :g/^/pu _
              << the above one also works >>
          Copy all lines matching a pattern to end of file
              :g/<pattern>/t$
          Yank all lines matching a pattern to register 'a'
              0"ay0:g/<pattern>/y A
          Increment the number items from current line to end-of-document by one
              :.,$g/^\d/exe "normal! \<c-a>"
          Comment (C) lines containing "DEBUG" statements
              g/^\s*DEBUG/exe "norm! I/* \<Esc>A */\<Esc>"
          A Reverse lookup for records
          (eg: An address book, with Name on start-of-line and fields after a space)
              :g/<patern>?^\w?p               "if only name is interested
              :g/<patern>/ka|?^\w?p|'ap       "if name and the lookup-line is interested
              :g/<patern>/?^\w?|+,/^[^ ]/-1p  "if entire record is interested
          Reverse a file (just to show the power of 'g')
              :g/^/m0
          Foot note 1: use :v to negate the search pattern
          Foot note 2: Some explanation of commonly used commands with :g
          :2,8co15 => Copy lines 2 through 8 after line 15
          :4,15t$  => Copy linesa 4 through 15 towards end of document (t == co)
              :-t$  => Copy previous line to end of document
               :m0  => Move current line to the top of the document
          :.,+3m$-1 => Move current line through cur-line+3 to the last but one line
                       of the document
          Foot note 3: Commands used with :g are ex commands, so a help search should
                       be,
                          :help :<help-topic>
                          eg. :help :k

          嘗試翻譯如下

          :g是一個非常老且很強(qiáng)的的命令。我只想通過一些例子來演示他的用法。希望對被人有用。

          “:g”的概述

                   語法::[rang]:g/<pattern>/[cmd]

          你可以認(rèn)為他是這么工作,在特定的范圍內(nèi)([rang]確定,默認(rèn)是整個文件)。他逐行逐行的用<pattern>去匹配,如果匹配成功就執(zhí)行 冒號命令 (“cmd”來指定)。另外,如果<pattern>匹配所有行,那么只有對當(dāng)前行執(zhí)行 冒號命令。

           

          今后會不斷更新……

           

          --------------------------

          :%s/^\(.*\)\n\1/\1$/        : 刪除重復(fù)行 # 非貪婪匹配,\{-}

          一會來分析

          posted on 2008-05-28 10:55 Jet Geng 閱讀(2481) 評論(3)  編輯  收藏

          Feedback

          # re: GVIM使用技巧匯集 2008-06-10 10:08 hamburger
          最近在做一些文字處理碰到這樣一個需求,為sql的insert語句增加一個排序Column,值當(dāng)然就是1,2,3...了,目前只會一個尷尬的做法:

          :g/table_name/s/);/,999);/ );是每個Sql的結(jié)尾
          :let i=0 | g:/table_name/s/999/\=i | let i=i+1
          不熟悉vim的語法,能不能一下子做到呢?
          ps:我試了一下\=i后面可以用.abc來增加額外的內(nèi)容。
          我的郵箱hamburgerwang(a)gmail.com  回復(fù)  更多評論
            

          # re: GVIM使用技巧匯集[未登錄] 2012-07-27 15:59 lee
          :let i=0 | g:/table_name/s/999/\=i | let i=i+1
          這個語句有點(diǎn)問題
          我用這個成功了
          :let i=0 | g/table_name/s/999/\=i/ | let i=i+1  回復(fù)  更多評論
            

          # re: GVIM使用技巧匯集[未登錄] 2012-08-01 09:33 jet
          謝謝lee,當(dāng)時筆誤!  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 砀山县| 中西区| 富顺县| 怀来县| 东城区| 连江县| 五大连池市| 英吉沙县| 外汇| 西充县| 龙门县| 苏州市| 麻阳| 焦作市| 海原县| 冷水江市| 扬中市| 林甸县| 长顺县| 荆门市| 奎屯市| 上虞市| 仙桃市| 梁河县| 二手房| 石台县| 凤冈县| 延川县| 阿拉善盟| 金寨县| 孟州市| 资溪县| 德州市| 怀宁县| 肇东市| 定兴县| 阿拉尔市| 洪雅县| 福州市| 桦南县| 托克逊县|