Vim實(shí)用技巧使用手冊

2012-08-25 08:55:37來源:Linux Today作者:

vim是Vi IMproved,是編輯器Vi的一個加強(qiáng)版,一個極其強(qiáng)大并符合IT工程師(程序員、運(yùn)維)習(xí)慣的編輯器。如果你是一名職業(yè)的SE,那么一定在尋找一款出色的能夠自由定制、滿足靈活編輯功能的編輯器。

(一)初級個性化配置你的vim

1、vim是什么?

vim是Vi IMproved,是編輯器Vi的一個加強(qiáng)版,一個極其強(qiáng)大并符合IT工程師(程序員、運(yùn)維)習(xí)慣的編輯器。如果你是一名職業(yè)的SE,那么一定在尋找一款出色的能夠自由定制、滿足靈活編輯功能的編輯器。那么答案,就是vim或者Emacs。而這一套連續(xù)的博文,就為您介紹vim編輯器。至于另一款強(qiáng)大的編輯器Emacs,我們會在今后的一個系列博文中看到。

2、配置文件在哪?

Windows系統(tǒng)的配置文件是vim安裝目錄下的vimrc文件。

Linux系統(tǒng),RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。

Mac OS X的配置文件是/usr/share/vim/vimrc。

3、vimRC中的RC是什么意思?

為什么把這么個沒有意義的問題也列出來?原因很簡單,就是我在接觸vim之初第二個想問的問題就是這個(第一個就是上面的“1”)。一般在運(yùn)行某個軟件、環(huán)境或工具之初,要初始執(zhí)行的一些命令,稱為Run Commands,即RC。根據(jù)Wikipedia.org的記載,RC縮寫的用法源自MIT的相容分時操作系統(tǒng)(Compatible Time-Sharing System,CTSS)[參考1]。所以以后如果你看到了SystemRC或者ScreenRC,也就知其緣由了。

4、三種基本模式

在《大家來學(xué)vim》中提到vim有6+5種模式,但除了細(xì)分程度不同外,實(shí)際上常用的只有3種模式:Normal Mode、Insert Mode和Command-line Mode。

從Normal Mode進(jìn)入Insert Mode,可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替換(replace)。

從Insert Mode進(jìn)入Normal Mode,只需要按ESC鍵即可。

從Normal Mode進(jìn)入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示輸入vim命令,“/”表示后面輸入要向下搜索的字符串,“?”表示后面輸入要向上搜索字符串。

從Command-line Mode進(jìn)入Normal Mode,只需要按ESC鍵即可了。

你可以把Normal Mode理解為常態(tài),進(jìn)入其他任何一種模式,需要某種特殊方式,而從其他特殊模式回到Normal Mode,就按ESC鍵即可。

5、vim中那些最最常用的配置

當(dāng)你嘗試去google一些其他人的vimrc配置時,你一定會找到一篇叫做《The ultimate vim configuration》的文章,不過它的作者,Amix后來在他的博客上提到[參考2],這份在google搜索vimrc會排在前十的vim配置文件,如今已經(jīng)過時了,所以他提供了一些更新信息。

(1)顏色設(shè)置

  • syntax on       "開啟代碼高亮
  • syntax off      "關(guān)閉代碼高亮
  • syntax enable   "開啟代碼高亮

(2)搜索設(shè)置

  • set hlsearch    "開啟搜索高亮
  • set nohlsearch  "關(guān)閉搜索高亮
  • set incsearch   "輸入搜索字符串的同時進(jìn)行搜索
  • set ignorecase  "搜索時忽略大小寫

(3)用戶界面

  • set showmode        "開啟模式顯示
  • set ruler           "開啟光標(biāo)位置提示
  • set number      "顯示行號
  • set nonu            "不顯示行號
  • set cursorline      "強(qiáng)調(diào)光標(biāo)所在行
  • set cmdheight=1 "命令部分高度為1

(4)編輯輔助配置

  • set autoindent      "自動縮進(jìn)
  • set noautoindent    "不自動縮進(jìn)
  • set smartindent     "智能縮進(jìn)
  • set autoread        "當(dāng)文件在外部被改變時,vim自動更新載入
  • set showmatch       "顯示匹配的括號

參考:

  1. Run Commands,http://en.wikipedia.org/wiki/Run_commands
  2. The Ultimate vim Configuration(vimRC),http://amix.dk/blog/post/19486

(二)常用的狀態(tài)切換按鍵

1、Normal Mode -> Insert Mode

i 小寫字母i,在光標(biāo)位置插入
a 小寫字母a,在光標(biāo)的下一個位置插入
I 大寫字母I,在光標(biāo)所在行的第一個非空格處插入
A 大寫字母A,在光標(biāo)所在行的最后一個字符處插入
o 小寫字母o,在光標(biāo)所在行的下一行處插入新行
O 大寫字母O,在光標(biāo)所在行的上一行處插入新航
r 小寫字母r,替換光標(biāo)所在處的字符一次
R 大寫字母R,持續(xù)替換光標(biāo)所在處的字符,直到按下ESC

2、Normal Mode -> Command-line Mode

:w 保存文件
:w! 強(qiáng)制保存文件(前提是用戶有修改文件訪問權(quán)限的權(quán)限)
:q 退出緩沖區(qū)
:q! 強(qiáng)制退出緩沖區(qū)而不保存
:wq 保存文件并退出緩沖區(qū)
:wq! 強(qiáng)制保存文件并退出緩沖區(qū)(前提是用戶有修改文件訪問權(quán)限的權(quán)限)

:w <filename> 另存為名為filename文件
:n1,n2 w <filename> 將n1行到n2行的數(shù)據(jù)另存為名為filename文件
:x 如果文件有更改,則保存后退出。否則直接退出。

3、Insert Mode -> Normal Mode

按下ESC鍵

4、Command-line -> Normal Mode

按下ESC鍵

(三)常用光標(biāo)移動按鍵

1、光標(biāo)字符操作

  • j 向下
  • k 向上
  • h 向左
  • l 向右
  • $ 光標(biāo)移動到行尾(End),注意要按Shift鍵
  • 0 光標(biāo)移動到行首(Home)
  • ^ 光標(biāo)移動到行首第一個非空白字符(Home),注意要按Shift鍵

2、光標(biāo)詞操作

  • w 光標(biāo)移動到后一詞的詞首
  • W 光標(biāo)移動到后一詞的詞首且忽略標(biāo)點(diǎn)符號
  • e 光標(biāo)移動到后一詞的詞尾
  • E 光標(biāo)移動到后一詞的詞尾且忽略標(biāo)點(diǎn)符號
  • b 光標(biāo)移動到前一詞的詞首
  • B 光標(biāo)移動到前一詞的詞首且忽略標(biāo)點(diǎn)符號

3、光標(biāo)句操作

  • ) 光標(biāo)移動到后一句的句首
  • ( 光標(biāo)移動到前一句的句首
  • % 配合“(”和“)”使用,尋找相匹配的另一半

4、光標(biāo)行操作

  • G 光標(biāo)移動到文檔的最后一行的第一個非空白字符
  • nG 光標(biāo)移動到文檔的第n行,相當(dāng)于”:n”
  • gg 光標(biāo)移動到文檔的第1行的第一個非空白字符,相當(dāng)于”1G”,也相當(dāng)于”:1″
  • <N> 光標(biāo)向下移動N行

5、光標(biāo)段操作

  • } 光標(biāo)移動到下一段的段首
  • { 光標(biāo)移動到上一段的段首
  • % 配合“(”和“)”使用,尋找相匹配的另一半

6、光標(biāo)頁操作

  • Ctrl+f 向下翻頁(Pagedown)
  • Ctrl+b 向上翻頁(Pageup)
  • Ctrl+d 向下翻半頁
  • Ctrl+u 向上翻半頁
  • H 光標(biāo)移動到目前顯示頁的第一行
  • M 光標(biāo)移動到目前顯示頁的中間行
  • L 光標(biāo)移動到目前顯示頁的最后一行

7、光標(biāo)自由操作

  • Ctrl+o 回到光標(biāo)的上一位置

(四)常用編輯操作按鍵

1、刪除操作(delete)

  • dd 刪除光標(biāo)所在行
  • ndd 刪除從光標(biāo)所在行開始,向下的n行
  • d1G 刪除從光標(biāo)所在行開始,到第一行的所有行
  • dG 刪除從光標(biāo)所在行開始,到最后一行的所有行
  • d$ 刪除從光標(biāo)所在位置,到行尾的所有字符
  • d0 刪除從光標(biāo)所在位置,到行首的所有字符

2、復(fù)制操作(yank)

  • yy 復(fù)制光標(biāo)所在行
  • nyy 復(fù)制從光標(biāo)所在行開始,向下的n行
  • y1G 復(fù)制從光標(biāo)所在行開始,到第一行的所有行
  • yG 復(fù)制從光標(biāo)所在行開始,到最后一行的所有行
  • y$ 復(fù)制從光標(biāo)所在位置,到行尾的所有字符
  • y0 復(fù)制從光標(biāo)所在位置,到行首的所有字符

3、粘貼操作(paste)

  • p 小寫字母p,粘貼剪貼板中的數(shù)據(jù),從光標(biāo)所在行的下一行開始
  • P 大寫字母P,粘貼剪貼板中的數(shù)據(jù),從光標(biāo)所在行的上一行開始

4、撤銷與重做操作(undo,redo)

  • u (Undo)撤銷上一個操作
  • Ctrl+r (Redo)重做上一個操作

5、重復(fù)操作

  • . 重復(fù)上一操作

6、替換操作(replace)

  • r 替換光標(biāo)所在處字符
  • R 進(jìn)入替換模式,直至按ESC退出
  • cc 替換光標(biāo)所在行
  • cw 替換光標(biāo)所在的英文單詞
  • ~ 轉(zhuǎn)換大小寫

7、排版操作

  • :le<ft> 光標(biāo)所在行左對齊
  • :ri<ght> 光標(biāo)所在行右對齊
  • :ce<nter> 光標(biāo)所在行居中

(五)常用多緩沖區(qū)操作按鍵

1、多文件編輯模式

  1. argument list模式,就是在打開vim編輯器時,攜帶多個文件路徑參數(shù)。
  2. buffer list模式,就是在進(jìn)入vim編輯器后,打開多個緩沖區(qū)進(jìn)行編輯。

2、單一緩沖區(qū)打開多個文件

  • :files 顯示目前打開了哪些文件
  • :n 切換到下一個緩沖區(qū)內(nèi)容
  • :N 切換到上一個緩沖區(qū)內(nèi)容
  • :2n 切換到下下個緩沖區(qū)內(nèi)容
  • :bn 下一個緩沖區(qū)內(nèi)容(buffer next)
  • :bp 上一個緩沖區(qū)內(nèi)容(buffer previous)

3、多個緩沖區(qū)打開多個文件

  • :sp [filename] 打開一個新的緩沖區(qū),如果有filename則內(nèi)容為該文件,否則為當(dāng)前文件
  • Ctrl+w n 新建一個緩沖區(qū)
  • Ctrl+w q 退出光標(biāo)所在的緩沖區(qū)
  • Ctrl+w j 光標(biāo)移動到下一緩沖區(qū)
  • Ctrl+w k 光標(biāo)移動到上一緩沖區(qū)
  • Ctrl+w l 光標(biāo)移動到右一緩沖區(qū)
  • Ctrl+w h 光標(biāo)移動到左一緩沖區(qū)
  • Ctrl+w v 左右切割窗口新建緩沖區(qū)
  • Ctrl+w s 上下切割窗口新建緩沖區(qū)
  • Ctrl+w o 使光標(biāo)所在緩沖區(qū)最大化,其他緩沖區(qū)隱藏

(六)常用搜索與書簽操作快捷鍵

1. 搜索字符串

 /string 向下搜索字符串“string”?string 向上搜索字符串“string” 

2. 重復(fù)上次搜索

n 根據(jù)上次搜索條件找到下一個匹配的字符串N 根據(jù)上次搜索條件找到上一個匹配的字符串

3. 搜索單詞

* 向下搜索光標(biāo)所在處的單詞(完全匹配)# 向上搜索光標(biāo)所在處的單詞(完全匹配)g* 向下搜索光標(biāo)所在處的單詞(部分匹配)g# 向上搜索光標(biāo)所在處的單詞(部分匹配)

4. 標(biāo)記書簽(mark)

ma a為小寫字母,為光標(biāo)所在處設(shè)定文檔書簽amA A為大寫字母,為光標(biāo)所在處設(shè)定全局書簽A

5. 使用書簽(mark)

 `a 到文檔書簽a處,Tab鍵上方'a 到文檔書簽a所在行行首處,Enter鍵左邊`A 到全局書簽A處,Tab鍵上方'A 到全局書簽A所在行行首處,Enter鍵左邊`n 如果n=0,緩沖區(qū)將打開上一次的文檔,且光標(biāo)在上次編輯最后的位置,1-9以此類推'n 如果n=0,緩沖區(qū)將打開上一次的文檔,且光標(biāo)在上次編輯最后的位置所在行的行首,1-9以此類推 

6. 查看書簽列表

:marks 查看當(dāng)前所有書簽

(7)關(guān)于加密

1、加密你的文本文件

當(dāng)你用vim打開或新建一個文件時,如果加上-x參數(shù),即:

vim -x filename

那么vim會提示你:

Enter entryption key:

當(dāng)你輸入了密碼后,vim會提示你重復(fù)輸入以確認(rèn):

Enter same key again:

你在設(shè)置密碼的時候,是以*來顯示的,非明文。當(dāng)下次有人(包括你自己)打開該文件的時候,vim就會提示:

Need encryption key for "main.cpp"
Enter encryption key:

這時你只要輸入你之前所設(shè)置的密碼就可以了。如果你輸入的密碼是錯誤的,vim并不會提示你密碼錯誤,而是顯示一堆無意義的垃圾代碼。

2、解除加密與重設(shè)密碼

打開你已經(jīng)加密的文件,然后輸入:

:set key=

這樣,你的密碼就被設(shè)置為空了,今后進(jìn)入就不再需要輸入密碼了。而如果你向重設(shè)密碼的話,你可以輸入:

:X

注意是個大寫字母X。這時vim會提示你,只要反復(fù)輸入兩次新的密碼就可以了:

Enter entryption key: *****
Enter sanme key again: *****

3、加密引起的問題

vim的加密功能,可以說是問題一大堆。比如:

(1)如果密碼輸入錯誤,vim不會拒絕訪問者編輯文件。在這種顯示亂碼的情況下編輯文件并保存,整個文件就會變得混亂不堪,無法辨識。今后即使使用正確的密碼打開文件,也看不到正確的文檔了。

(2)如果對一個需要編譯的源代碼文件進(jìn)行了加密,則無法通過編譯器的語法檢查。

(3)交換文件是無法加密的。這樣引起什么問題?問題就是如果其他用戶想辦法讀取到了你的交換文件,就可以繞過解密環(huán)節(jié),你的加密也就無意義了。解決的辦法就是,不使用交換文件。方法有三個,一是修改你的vimrc文件(vim配置文件):

set noswapfile

二是在用vim打開文件之初就輸入命令:

vim -x -n filename

(注意-x是加密參數(shù),與我們所說的swap沒有關(guān)系,不要搞混)

三是在進(jìn)入vim編輯該文件后,輸入:

:setlocal noswapfile

不過不使用交換文件的壞處就是,你可能會面臨數(shù)據(jù)丟失而無法找回的悲劇。所以又想用加密,又想不丟失文件的朋友們,就勤按“:w”吧。

關(guān)鍵詞:Vim

贊助商鏈接: