關於vim的經常使用操做 vim經常使用操做和使用技巧

vim經常使用操做和使用技巧

vi是linux與unix下的經常使用文本編輯器,其運行穩定,使用方便,本文將分兩部分對其經常使用操做技巧和配置進行闡述,其中參考了網上的一些文章,對做者表示感謝php

PART1 操做技巧

說明:html

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

如下的例子中 :xxx 表示在擴展模式下輸入 xxx 並回車linux

()中的命令表示相關命令.[]表示命令等同正則表達式

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

移動光標

  在 vi 中, 移動光標和編輯是兩件事, 正由於區分開來, 因此能夠很方便的進行光標定windows

位和編輯. 所以能更快一點移動光標是頗有用的.tomcat

 w              移動光標到下一個單詞開頭.app

 e               移動光標到下一個單詞結尾編輯器

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

 

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

 ^               移動光標到本行最開頭的字符處.

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

 A               移動光標至行尾並處於「追加」狀態,直接編輯

 

 H               移動光標到屏幕的首行.

 M               移動光標到屏幕的中間一行.

 L               移動光標到屏幕的尾行.

 

 gg              移動光標到文檔首行.

 G               移動光標到文檔尾行.

 :n              跳至第n行

 

 

 ctrl + f        向下翻頁 同 page down.

 ctrl + b        向上翻頁 同 page up.

 ctrl + d        向下翻半頁 此比較有用

 ctrl + u        向上翻半頁 此比較有用

 ctrl + e        向下翻一行

 ctrl + y        向上一行

 

 [[              轉到上一個位於第一列的「{」

 ]]              轉到下一個位於第一列的「}」

 {               轉到上一個空行

 }               轉到下一個空行

 

 ''   兩個單引號 此命令至關有用, 它移動光標到上一個標記處, 好比用 gd, * 等查找到某個單詞後, 再輸入此命令則回到上次停留的位置.

 '.   一單一點   此命令至關好使, 它移動光標到上一次的修改行.

 `.   一倒引一點 此命令至關強大, 它移動光標到上一次的修改點.

查找

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

                 向上查找.其中xxx能夠是正規表達式,關於正規式就很少說了.

                 通常來講是區分大小寫的, 要想不區分大小寫, 那得先輸入

                 :set ignorecase

                 查找到之後, 再輸入 n 查找下一個匹配處, 輸入 N 反方向查找.

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

                 下(上)一個單詞. 一樣, 再輸入 n 查找下一個匹配處, 輸入 N 反方

                 向查找.

 g*(g#)          此命令與上條命令類似, 只不過它不徹底匹配光標所在處的單詞, 而

                 是匹配包含該單詞的全部字符串.

 

 gd              本命令查找與光標所在單詞相匹配的單詞, 並將光標停留在文檔的非

                 註釋段中第一次出現這個單詞的地方. 用於查找局部變量等

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

f(F)x           本命令表示在光標所在行進行查找, 查找光標右(左)方第一個x字符.

                 找到後:

                 輸入 ; 表示繼續往下找

                 輸入 , 表示反方向查找

替換

  替換是 vi 的強項,使用「:s/模式/字符串/標誌」進行替換,其中的「模式」是一個正則表達式,能夠用來匹配字符串.如下提供幾個例子.

 :s/aa/bb/g       將光標所在行出現的全部包含 aa 的字符串中的 aa 替換爲 bb

 :s/\<aa\>/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= *$==     將全部行尾多餘的空格刪除

 :%s/\s\+$//     將全部行尾多餘的空格刪除

 

 :g/^\s*$/d          將全部不包含字符(空格也不包含)的空行刪除

 :%s/\(\s*\n\)\+/\r/    將全部不包含字符(空格也不包含)的空行刪除.

 :%s!\s*//.*!!        去掉全部的「//」註釋

 

注:Vim 在搜索和替換時會對匹配成功的文本進行加亮,在已經完成搜索和替換任務後,這種加亮有時反而會妨礙顯示。Vim 專門提供一個命令取消這種加亮(直到用戶再一次使用搜索或替換命令):「:nohlsearch」。建議用戶建立一個鍵盤映射(key mapping)加入到

.vimrc中,如:     nmap :nohlsearch

特殊編輯

ga              顯示光標所指字符的encoding 編碼,好比ASCII碼

 guw             光標所在單詞光標後的字符小寫

 gUw             光標所在單詞光標後的字符大寫

撤消

 u

拷貝, 刪除與粘貼

  在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標移動命令

結合的, 看幾個例子就可以明白了.

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

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

 daw              表示刪除光標所在的單詞,無論光標在此單詞那一位置

 

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

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

 

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

 d$[D]           表示刪除從當前光標到光標所在行尾的內容.

 

 特殊地:

 yy              表示拷貝光標所在行.

 dd              表示刪除光標所在行.

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

 xp              表示交換光標與其後的字符的位置

 ddp             表示光標所在行與下一行交換

 J               表示光標所在行與下一行合併

 關於拷貝, 刪除和粘貼的複雜用法與寄存器有關, 能夠自行查詢.

VISUAL模式

Visual 模式用於選擇多行文本或文本塊,開頭結尾本身去定,象用鼠標選同樣。

v 選擇多行,頭尾自訂

ctrl + v 選擇矩形塊,有點像UE中的列模式,O,o能夠定位光標到四個端點

用visual選擇的塊能夠看做一個基本單位,刪除複製什麼的均可以直接使用

數字與命令

  在 vi 中數字與命令結合每每表示重複進行此命令, 若在擴展模式的開頭出現則表示行

號定位. 如:

 5yy[y5y]        表示拷貝光標如下 5 行.

 5dd[d5d]        表示刪除光標如下 5 行.

 

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

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

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

 

 5fx             表示查找光標後第 5 個 x 字符.

 5w(e)           移動光標到下五個單詞的頭部(尾部).

自動完成與路徑設定

  在 vi 中, 不要求你輸入每個字符, 能夠有不少種方法快速輸入一些字符.

 ctrl+p(ctrl + n)    在編輯模式中, 輸入幾個字符後再輸入此命令則 vi 開始向上(下)搜

                 索開頭與其匹配的單詞並補齊, 不斷輸入此命令則循環查找. 此命令

                 會在全部在這個 vim 程序中打開的全部文件中進行匹配.

 

 ctrl + x + l       在編輯模式中, 整行補齊, 可是僅在本窗口中出現的文檔中進行匹配.

 

 ctrl + x + f       在編輯模式中, 這個命令表示補齊文件名. 如輸入:

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

                 /usr/local/tomcat/

 

 abbr            即縮寫. 這是一個宏操做, 能夠在編輯模式中用一個縮寫代替另外一個

                 字符串. 好比編寫java文件的經常輸入 System.out.println, 這很

                 是麻煩, 因此應該用縮寫來減小敲字. 能夠這麼作:

                 :abbr sprt System.out.println

                 之後在輸入sprt後再輸入其餘非字母符號, 它就會自動擴展爲System.

                 out.println

 在做關鍵字匹配完成時,若是當前文件和其它打開的文件中沒有想要的結果,Vim

會自動到「#include」的文件中進行進一步的搜索(爲何是「#include」呢?請查閱

「:help 'include'」),搜尋的目錄則由選項 path 決定,其缺省值在 Unix(含

Linux)下爲「.,/usr/include,,」,表明搜索的目錄依次是文件所在目錄、/usr/include

和當前目錄。根據實際狀況,你可能須要在 .vimrc文件中設置該選項,加入項目相關的包含目錄,注意通常要保留最後的「,,」,除非你不須要在當前目錄下搜索。

設置了合適的path後,另外帶來的一個便利就是可使用「gf」命令方便地跳轉到光標下的文件名所表明的文件中。在上面的例子中,把光標移到「stdio.h」的任一字符上,鍵入

「gf」,則 Vim會自動打開 /usr/include/stdio.h文件。使用「Ctrl-O」(參見「:helpCTRL-O」)可返回到原先的文件中。

多文件編輯

  在一個 vim 程序中打開不少文件進行編輯是挺方便的.

  vi file1 file2 file3 ...

  在完成一個文件的編輯並存盤後(:w),鍵入命令

  :n就能夠進入下一個文件的編輯,

  :N就進入上一個文件進行編輯

  若是要指定編輯一個文件則用

  :e 文件名 指定文件編輯

  或者用:ls[:files] 由vi列出文件名,好比 在屏幕的最下方

                     會顯示出以下數據:

                     1   %a      "usevim.html"         行 162

                     2   #       "xxxxxx.html"         行 0

 

                     其中:

                     1               表示打開的文件序號, 這個序號頗有用處.

                     %a              表示文件代號, % 表示當前編輯的文件,

                                     # 表示上次編輯的文件

                     "usevim.html"   表示文件名.

                     行 162          表示光標位置.

                  

  而後 :b序號,打開:ls命令中指定序號的文件,

這樣即可以在多個文件中進行復制粘貼了

 其餘操做

 :sp(:vsp) 文件名    vim 將分割出一個橫(縱)向窗口, 並在該窗口中打開新文件.

                     從 vim6.0 開始, 文件名能夠是一個目錄的名稱, 這樣, vim 會

                     把該目錄打開並顯示文件列表, 在文件名上按回車則在本窗口打

                     開該文件, 若輸入 O 則在新窗口中打開該文件, 輸入 ? 能夠看

                     到幫助信息.

 

 ctrl +w +w          vim 分割了好幾個窗口怎麼辦? 輸入此命令能夠將光標循環定位

                     到各個窗口之中.

 :set diff           此命令用於比較兩個文件, 能夠用

                     :vsp filename

                     命令打開另外一個文件, 而後在每一個文件窗口中輸入此命令,就能看

                     到效果了.

TAB

  TAB 就是製表符, 單獨拿出來作一節是由於這個東西確實頗有用.

  <<                  輸入此命令則光標所在行向左移動一個 tab.

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

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

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

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

 

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

  有的人但願 tab 徹底用空格代替, 也有的人但願 tab 就是 tab. 不要緊, vim 能

  幫助你.如下的設置通常也都先寫入配置文件中, 省得老敲.

  :set shiftwidth=4   設置自動縮進 4 個空格, 固然要設自動縮進先.

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

  :set tabstop=4      實際的 tab 即爲 4 個空格, 而不是缺省的 8 個.

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

文件跳轉與tags

文件跳轉要使用tags文件,生成方式爲 ctags -R *, ctags爲外部命令。

使用方法:

(1)把光標移到變量名或函數上,按

   ctrl+ ] 跳轉到變量或函數定義的地方,按

   ctrl+ t 返回到原文件

   能夠屢次跳轉和屢次返回

(2)在vi中:ta[:tag]能夠直接跳轉到變量或函數定義的地方

(3)vi -t 變量或函數名,直接打開變量或函數定義的文件

 

其餘選項

:tselect [關鍵字] 顯示與「關鍵字」匹配的標記列表,輸入數字跳轉到指定的標記

:tjump [關鍵字]

相似於「:tselect」,但當匹配項只有一個時直接跳轉至標記處而再也不顯示列表

:tn               跳轉到下一個匹配的標記處

:tp               跳轉到上一個匹配的標記處

Make 和 grep

Make [17] 和grep [18] 應當算是 Unix 世界裏無人不曉的基本工具了吧。很天然的,Vim

對它們有着特殊的支持。該支持主要經過訪問一個特殊的快速修訂窗口(quickfix

window)來實現。直接在 Vim 的命令模式裏輸入相應的 make 或 grep 命令(如「:grep

foo

*.c」)便可將命令的執行結果放入該窗口,同時根據返回的結果跳轉到第一個錯誤(make

的狀況;在使用 grep 時是匹配成功之處)。如下是經常使用的「快速修訂」命令:

:cn(顯示下一個錯誤)

:cp(顯示上一個錯誤)

:cl(列出全部的錯誤及其編號)

:cc(跳轉到指定編號的錯誤)

:copen(打開快速修訂窗口,在其中顯示全部錯誤,可在錯誤上雙擊鼠標或按回車鍵跳轉至

該錯誤;示例參見圖 4)

執行外部命令

在「:make」這樣的命令中,Vim會自動調用外部的程序。用戶固然也能夠本身執行外部的程序:估計不少的人都已經知道了用「:!命令」能夠在 Vim中執行一個外部命令。不過,估計大部分人都不知道,還有其它一些命令能夠執行外部命令,而且,即便「:!」命令裏面也有一些技巧可使用。最正規的執行外部命令的方法,如前所述,就是「:!」。好比,咱們想要顯示當前目錄下的全部文件,就能夠直接執行:「:!ls」。Vim會在一個終端窗口中進行文件列表,而後提示咱們按鍵返回 Vim中。

    事實上,這種方式對於「cp」、「rm」這樣基本不須要輸出的命令比較實用,而對於「ls」這樣關注於輸出的命令並不太適用。若是想把外部命令執行的結果插入到當前編輯的緩衝區中,能夠考慮使用「:r!」。好比,咱們使用「:r!ls」,就能夠把「ls」命令的執行結果插入到緩衝區中光標所在行下面。在使用宏時,這可能會特別有用。

Vim的「:!」命令還有一個特別強大的技巧可使用。拿一個實際例子,咱們須要對在一個文件的每一行以前插入一個編號,該怎麼作呢?——用 Vim的宏或者腳本能夠完成這一工做,但這不是最高效、最靈活的工做方式。Linux下通常帶有的 GNU 的nl,能夠用很是靈活的方式來完成這一任務——要對全部的非空行進行編號,只須要「:%!nl」;要對包含空行的全部行進行編號?OK,「:%!nl -ba」。

稍做一點解釋。當使用可視模式選中文本行後而後鍵入「:!」(命令行上將出現「:'<,'>!

」,表示命令的範圍是選定的文本),或者使用「:%!」(表示命令的範圍是整個緩衝區中

的文本),Vim在執行後面的命令時,將把命令範圍裏的文本行做爲後面執行的命令標準輸入,並用命令執行後的標準輸出替換當前緩衝區中的這些文本行。這就是上面的命令行的工做原理。

##############################高級########################################### 宏替換

  vi 不只能夠用 abbr 來替換文字, 也能夠進行命令的宏定義. 有些命令輸起來很費勁,

所以我把它們定義到 - 上, 這樣就很方便了.這些配置能夠預先寫到 ~/.vimrc

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

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

 :nmap w                  命令模式下轉移光標到不一樣窗口

 :imap                輸入模式下運行

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

 :imap              同上

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__ 替換成今天的日期什麼的.

 

 

 

 

 

PARTII 配置文件

在啓動的時候vim會讀取 /etc/vimrc 和 ~/.vimrc (也就是說, 全局設置的vimrc 和用戶設置)。通常狀況下用戶設置本身home目錄的.vimrc就已足夠

「雙引號開始的行爲註釋行,下同

「去掉討厭的有關vi一致性模式,避免之前版本的一些bug和侷限

set nocompatible

 

「顯示行號

set nummber

 

「檢測文件的類型

filetype on

 

「記錄歷史的行數

"set history=1000

 

「背景使用黑色

set background=dark

 

"語法高亮度顯示

syntax on

 

「下面兩行在進行編寫代碼時,在格式對起上頗有用;

「第一行,vim使用自動對起,也就是把當前行的對起格式應用到下一行;

「第二行,依據上面的對起格式,智能的選擇對起方式,對於相似C語言編寫上頗有用

set autoindent

set smartindent

 

"C語言對齊方式,最好用它

set cindent

 

「第一行設置tab鍵爲4個空格,第二行設置當行之間交錯時使用4個空格

set tabstop=4

set shiftwidth=4

 

"以空格代替tab,注意make文件有時候必須用tab,而不能用空格代替

"set expandtab

 

「設置匹配模式,相似當輸入一個左括號時會匹配相應的那個右括號

set showmatch

 

「在編輯過程當中,在右下角顯示光標位置的狀態行

set ruler

 

「默認狀況下,尋找匹配是高亮度顯示的,該設置關閉高亮顯示,最好定義快捷鍵

"set nohls

"打開高亮

set hlsearch

 

「查詢時很是方便,如要查找book單詞,當輸入到/b時,會自動找到第一

「個b開頭的單詞,當輸入到/bo時,會自動找到第一個bo開頭的單詞,依

「次類推,進行查找時,使用此設置會快速找到答案,當你找要匹配的單詞

「時,別忘記回車

set incsearch

 

"設置退格鍵

set backspace=2

"set backspace =indent,eol,start

 

"不進行文件備份

set nobackup

"不要交換文件

set noswapfile

 

「去除vim的GUI版本中的toolbar

"set guioptions-=T

 

「當vim進行編輯時,若是命令錯誤,會發出一個響聲,該設置去掉響聲

"set vb t_vb=

 

"設定文件編碼類型,完全解決中文編碼問題

let &termencoding=&encoding

set fileencodings=utf-8,gbk,ucs-bom,cp936

set fenc=utf-8 " default fileencoding

set fencs=utf-8,gb18030,gbk,gb2312,cp936,ucs-bom,euc-jp

 

:set list 能夠用來顯示非可見字符

 

參考資料

一、vim的中文手冊在下面鏈接處能夠找到

http://vimcdoc.sourceforge.net/

能夠下栽其中的一個PDF版本,裏面介紹的很詳細,強烈推薦:)

二、CU的貼子

http://bbs.chinaunix.net/viewthread.php?tid=472608&extra=page%3D1

轉載:

http://blog.chinaunix.net/uid-209416-id-2410702.html

相關文章
相關標籤/搜索