1. 程式人生 > >VIM使用技巧及快捷操作

VIM使用技巧及快捷操作

先說明一下:

以下的例子中xxx 表示在命令模式下輸入xxx 並回車

以下的例子中:xxx 表示在擴充套件模式下輸入xxx 並回車

小括號中的命令表示相關命令.

在編輯模式或可視模式下輸入的命令會另外註明.

1查詢


   /xxx(?xxx)       表示在整篇文件中搜索匹配xxx的字串, / 表示向下查詢, ? 表示

                     向上查詢.其中xxx可以是正規表示式,關於正規式就不多說了.

                     一般來說是區分大小寫的要想不區分大小寫那得先輸入

:set ignorecase

                       查詢到以後
再輸入查詢下一個匹配處輸入反方向查詢.

   *(#)             當游標停留在某個單詞上時輸入這條命令表示查詢與該單詞匹配的

                       下()一個單詞同樣再輸入查詢下一個匹配處輸入反方

                       向查詢.

   g*(g#)           此命令與上條命令相似只不過它不完全匹配游標所在處的單詞

                   是匹配包含該單詞的所有字串.

   gd               本命令查詢與游標所在單詞相匹配的單詞並將游標停留在文件的非


                   註釋段中第一次出現這個單詞的地方.

   %                本命令查詢與游標所在處相匹配的反括號包括() [] {}

   f(F)x            本命令表示在游標所在行進行查詢查詢游標右()方第一個x字元.

                   找到後:

                   輸入表示繼續往下找

                   輸入表示反方向查詢

2. 快速移動游標


    在vi 移動游標和編輯是兩件事正因為區分開來所以可以很方便的進行游標定

位和編輯因此能更快一點移動游標是很有用的
.

   w(e)             移動游標到下一個單詞.

   b                移動游標到上一個單詞.

   0                移動游標到本行最開頭.

   ^                移動游標到本行最開頭的字元處.

   $                移動游標到本行結尾處.

   H                移動游標到螢幕的首行.

   M                移動游標到螢幕的中間一行.

   L                移動游標到螢幕的尾行.

   gg               移動游標到文件首行.

   G                移動游標到文件尾行.

   c-f              (ctrl 鍵與鍵一同按下本命令即page down.

   c-b              (ctrl 鍵與鍵一同按下後同本命令即page up.

   c-u:螢幕往移動半頁。


   c-d:螢幕往移動半頁。

   c+e                            編輯視窗中的檔案內容整體上移一行。

   c+y                           編輯視窗中的檔案內容整體下移一行。


   ''               此命令相當有用它移動游標到上一個標記處比如用gd, * 等查

                   找到某個單詞後再輸入此命令則回到上次停留的位置.

   '.               此命令相當好使它移動游標到上一次的修改行.

   `.               此命令相當強大它移動游標到上一次的修改點.

3. 拷貝刪除與貼上


    在vi 表示拷貝, d 表示刪除, p 表示貼上其中拷貝與刪除是與游標移動命令

結合的看幾個例子就能夠明白了.

   yw               表示拷貝從當前游標到游標所在單詞結尾的內容.

   dw               表示刪除從當前游標到游標所在單詞結尾的內容.

   y0               表示拷貝從當前游標到游標所在行首的內容.

   d0               表示刪除從當前游標到游標所在行首的內容.

   y$               表示拷貝從當前游標到游標所在行尾的內容.

   d$               表示刪除從當前游標到游標所在行尾的內容.

   yfa              表示拷貝從當前游標到游標後面的第一個a字元之間的內容.

   dfa              表示刪除從當前游標到游標後面的第一個a字元之間的內容.

   特殊地:

   yy               表示拷貝游標所在行.

   dd               表示刪除游標所在行.

   D                表示刪除從當前游標到游標所在行尾的內容.

   關於拷貝刪除和貼上的複雜用法與暫存器有關可以自行查詢.

4. 數字與命令


    在vi 中數字與命令結合往往表示重複進行此命令若在擴充套件模式的開頭出現則表示行

號定位:

   5fx              表示查詢游標後第字元.

   5w(e)            移動游標到下五個單詞.

   5yy              表示拷貝游標以下.

   5dd              表示刪除游標以下.

   y2fa             表示拷貝從當前游標到游標後面的第二個a字元之間的內容.

   :12,24y          表示拷貝第12行到第24行之間的內容.

   :12,y            表示拷貝第12行到游標所在行之間的內容.

   :,24y            表示拷貝游標所在行到第24行之間的內容刪除類似.

5. 快速輸入字元


    在vi 不要求你輸入每一個字元可以有很多種方法快速輸入一些字元.

    使用linux/unix 的同學一定有一個經驗在命令列下輸入命令時敲入頭幾個字元再按

TAB 系統就會自動將剩下的字元補齊假如有多個匹配則會打印出來這就是著名的命令

補齊(其實windows中也有檔名補齊功能). vi 中有許多的字串補齊命令非常方便.

   c-p(c-n)         在編輯模式中輸入幾個字元後再輸入此命令則vi 開始向上()

                   索開頭與其匹配的單詞並補齊不斷輸入此命令則迴圈查詢此命令

                   會在所有在這個vim 程式中開啟的檔案中進行匹配.

   c-x-l            在編輯模式中此命令快速補齊整行內容但是僅在本視窗中出現的

                   文件中進行匹配.

   c-x-f            在編輯模式中這個命令表示補齊檔名如輸入:

                   /usr/local/tom 後再輸入此命令則它會自動匹配出:

                   /usr/local/tomcat/

   abbr             即縮寫這是一個巨集操作可以在編輯模式中用一個縮寫代替另一個

                   字串比如編寫java檔案的常常輸入System.out.println, 這很

                   是麻煩所以應該用縮寫來減少敲字可以這麼做:

                   :abbr sprt System.out.println

                   以後在輸入sprt後再輸入其他非字母符號它就會自動擴充套件為System.

                   out.println

6. 替換


    替換是vi 的強項因為可以用正規表示式來匹配字串.以下提供幾個例子.

   :s/aa/bb/g       將游標所在行出現的所有包含aa 的字串中的aa 替換為bb

   :s/\/bb/g   將游標所在行出現的所有aa 替換為bb, 僅替換aa 這個單詞

   :%s/aa/bb/g      將文件中出現的所有包含aa 的字串中的aa 替換為bb

   :12,23s/aa/bb/g 將從12行到23行中出現的所有包含aa 的字串中的aa 替換為bb

   :12,23s/^/#/     將從12行到23行的行首加入字元

   :%s= *$==        將所有行尾多餘的空格刪除

   :g/^\s*$/d        將所有不包含字元(空格也不包含)的空行刪除.

:%s/<br>/<br />/g

而必須寫成:

:%s/<br>/<br \/>/g

斜槓要轉義

s/\\/\\\\/g

8. 巨集替換


    vi 不僅可以用abbr 來替換文字也可以進行命令的巨集定義有些命令輸起來很費勁,

因此我把它們定義到這樣就很方便了.這些配置可以預先寫到~/.vimrc

(windows 下為$VIM/_vimrc) 寫進去的時候不用寫前面的冒號.

   :nmap  :nohls               取消被搜尋字串的高亮

   :nmap  w                   命令模式下轉移游標到不同視窗

   :imap                  輸入模式下執行

   :nmap  :%s= *$==           刪除所有行尾多餘的空格.

   :imap                同上

   :java : (這裡為什麼說java 因為以下定義對其他檔案格式不起作用下文

             會說到如何實現這一點)

   :nmap  :comp javac:mak -d . %

        此命令用javac 編譯java 檔案它會自動將游標定位到出錯點不過這需要定

        義一個javac.vim 檔案在$VIM/compiler javac.vim 裡面只有兩行字:

           setlocal makeprg=javac

           setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

   :nmap  :comp ant:mak

        此命令用ant 編譯java 檔案它會自動將游標定位到出錯點一般來說安裝

        vim 後已經有了compiler/ant.vim檔案因此這個命令可以直接使用但是需要

        在當前目錄下有build.xml 檔案當然還必須安裝ant 才行.

   :nmap  :cl                  此命令用於檢視所有的編譯錯誤.

   :imap  

   :nmap  :cc                  此命令用於檢視當前的編譯錯誤.

   :imap  

   :nmap  :cn                  此命令用於跳到下一個出錯位置.

   :imap  

   :nmap  :cp                  此命令用於跳到上一個出錯位置.

   :imap  

   :nmap  :JavaBrowser

        此命令用於在視窗左部分割出一個新視窗裡面的內容是java 的資源樹包括

        本檔案中出現的類類的成員變數及成員方法就好像JCreator 表現的那樣.

        在這個視窗中輸入會看到幫助嘿嘿很好用不過需要ctags 支援.

   :imap  

9. TAB


    TAB 就是製表符單獨拿出來做一節是因為這個東西確實很有用.

    >                   輸入此命令則游標所在行向右移動一個tab.

    5>>                  輸入此命令則游標後行向右移動一個tab.

    :12,24>              此命令將12行到14行的資料都向右移動一個tab.

    :12,24>>             此命令將12行到14行的資料都向右移動兩個tab.

    那麼如何定義tab 的大小呢有人願意使用個空格位有人用4有的用2.

    有的人希望tab 完全用空格代替也有的人希望tab 就是tab. 沒關係, vim 

    幫助你.以下的設定一般也都先寫入配置檔案中免得老敲.

    :set shiftwidth=4    設定自動縮排個空格當然要設自動縮排先.

    :set sts=4           即設定softtabstop 4. 輸入tab 後就跳了.

    :set tabstop=4       實際的tab 即為個空格而不是預設的.

    :set expandtab       在輸入tab , vim 用恰當的空格來填充這個tab.

10. autocmd


     這個命令十分的強大可以用這個命令實現對不同的檔案格式應用不同的配置可以

在新建檔案時自動新增上版權宣告等等這些命令一般定義在~/.vimrc 這樣的配置檔案

裡面由於他很強大所以我不能給出很具體的說明只能舉幾個例子詳細的請看幫助.

   :autocmd!                刪除所有之前的自動命令.

   autocmd FileType         java   source ~/.vim/files/java.vim

   autocmd FileType         java   source ~/.vim/files/jcommenter.vim

     以上兩條命令讓我在開啟java 檔案時才應用後面提到的兩個配置檔案.

   autocmd BufNewFile       *.java   0r ~/.vim/files/skeletons/java.skel

     以上這條命令讓我在新建java 檔案時自動加入java.skel 檔案的內容.

   autocmd BufNewFile       *.java   normal gnp

     以上這條命令讓我在新建java 檔案時自動執行gnp 命令這個命令進行一些特殊化

     處理比如將新java 檔案中的__date__ 替換成今天的日期什麼的.

11. 常用指令碼


     在vim.sf.net 你可以發現很多指令碼(script), 這些指令碼常常有讓你意想不到的作用.

我常用的有:

     jcommenter.vim         自動加入javadoc 風格的註釋.

     JBrowser.vim           類資源瀏覽. C, C++ 等可以用Tlist

     還有許多有用的比如checkstyle.vim 可以檢驗你的程式設計風格, jad.vim 可以直接

     反編譯.class 檔案等等.