VIM實用基本操作技巧

yuedu發表於2014-09-03

  文字編輯器有很多,圖形模式下有gedit、kwrite等編輯器,文字模式下的編輯器有vi、vim(vi的增強版本)和nano。vi和vim是Linux系統中最常用的編輯器。有人曾這樣的說過在世界上有三種人:一種是使用Vi的,另一種是使用是Emacs的,剩下的是第三種人。

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

  1、vim是什麼?

  vim是Vi IMproved,是編輯器Vi的一個加強版,一個極其強大並符合IT工程師(程式設計師、運維)習慣的編輯器。如果你是一名職業的SE,那麼一定在尋找一款出色的能夠自由定製、滿足靈活編輯功能的編輯器。那麼答案,就是vim或者Emacs。

  2、配置檔案在哪?

  Windows系統的配置檔案是vim安裝目錄下的vimrc檔案。

  Linux系統,RHEL和CentOS的配置檔案是/etc/vimrc,Debian和Ubuntu的配置檔案是/usr/share/vim/vimrc。

  Mac OS X的配置檔案是/usr/share/vim/vimrc。

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

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

  4、三種基本模式

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

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

  從Insert Mode進入Normal Mode,只需要按ESC鍵即可。

  從Normal Mode進入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示輸入vim命令,“/”表示後面輸入要向下搜尋的字串,“?”表示後面輸入要向上搜尋字串。

  從Command-line Mode進入Normal Mode,只需要按ESC鍵即可了。

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

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

  當你嘗試去google一些其他人的vimrc配置時,你一定會找到一篇叫做《The ultimate vim configuration》的文章,不過它的作者,Amix後來在他的部落格上提到[參考2],這份在google搜尋vimrc會排在前十的vim配置檔案,如今已經過時了,所以他提供了一些更新資訊。

  (1)顏色設定

  syntax on       “開啟程式碼高亮

  syntax off      “關閉程式碼高亮

  syntax enable   “開啟程式碼高亮

  (2)搜尋設定

  set hlsearch    “開啟搜尋高亮

  set nohlsearch  “關閉搜尋高亮

  set incsearch   “輸入搜尋字串的同時進行搜尋

  set ignorecase  “搜尋時忽略大小寫

  (3)使用者介面

  set showmode        “開啟模式顯示

  set ruler           “開啟游標位置提示

  set number      “顯示行號

  set nonu            “不顯示行號

  set cursorline      “強調游標所在行

  set cmdheight=1 “命令部分高度為1

  (4)編輯輔助配置

  set autoindent      “自動縮排

  set noautoindent    “不自動縮排

  set smartindent     “智慧縮排

  set autoread        “當檔案在外部被改變時,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

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

  1、Normal Mode -> Insert Mode

  i 小寫字母i,在游標位置插入

  a 小寫字母a,在游標的下一個位置插入

  I 大寫字母I,在游標所在行的第一個非空格處插入

  A 大寫字母A,在游標所在行的最後一個字元處插入

  o 小寫字母o,在游標所在行的下一行處插入新行

  O 大寫字母O,在游標所在行的上一行處插入新航

  r 小寫字母r,替換游標所在處的字元一次

  R 大寫字母R,持續替換游標所在處的字元,直到按下ESC

  2、Normal Mode -> Command-line Mode

  :w 儲存檔案

  :w! 強制儲存檔案(前提是使用者有修改檔案訪問許可權的許可權)

  :q 退出緩衝區

  :q! 強制退出緩衝區而不儲存

  :wq 儲存檔案並退出緩衝區

  :ZZ  儲存檔案並且退出

  :wq! 強制儲存檔案並退出緩衝區(前提是使用者有修改檔案訪問許可權的許可權)

  :w <filename> 另存為名為filename檔案

  :n1,n2 w <filename> 將n1行到n2行的資料另存為名為filename檔案

  : x 如果檔案有更改,則儲存後退出。否則直接退出。

  3、Insert Mode -> Normal Mode

  按下ESC鍵

  4、Command-line -> Normal Mode

  按下ESC鍵

  (三)常用游標移動按鍵

  1、游標字元操作

  j 向下

  k 向上

  h 向左

  l 向右

  $ 游標移動到行尾(End),注意要按Shift鍵

  0 游標移動到行首(Home)

  ^ 游標移動到行首第一個非空白字元(Home),注意要按Shift鍵

  2、游標詞操作

  w 游標移動到後一詞的詞首

  W 游標移動到後一詞的詞首且忽略標點符號

  e 游標移動到後一詞的詞尾

  E 游標移動到後一詞的詞尾且忽略標點符號

  b 游標移動到前一詞的詞首

  B 游標移動到前一詞的詞首且忽略標點符號

  3、游標句操作

  ) 游標移動到後一句的句首

  ( 游標移動到前一句的句首

  % 配合“(”和“)”使用,尋找相匹配的另一半

  4、游標行操作

  G 游標移動到文件的最後一行的第一個非空白字元

  nG 游標移動到文件的第n行,相當於”:n”

  gg 游標移動到文件的第1行的第一個非空白字元,相當於”1G”,也相當於”:1″

  <N> 游標向下移動N行

  5、游標段操作

  } 游標移動到下一段的段首

  { 游標移動到上一段的段首

  % 配合“(”和“)”使用,尋找相匹配的另一半

  6、游標頁操作

  Ctrl+f 向下翻頁(Pagedown)

  Ctrl+b 向上翻頁(Pageup)

  Ctrl+d 向下翻半頁

  Ctrl+u 向上翻半頁

  H 游標移動到目前顯示頁的第一行

  M 游標移動到目前顯示頁的中間行

  L 游標移動到目前顯示頁的最後一行

  7、游標自由操作

  Ctrl+o 回到游標的上一位置

  (四)常用編輯操作按鍵

  1、刪除操作(delete)

  dd 刪除游標所在行

  ndd 刪除從游標所在行開始,向下的n行

  d1G 刪除從游標所在行開始,到第一行的所有行

  dG 刪除從游標所在行開始,到最後一行的所有行

  d$ 刪除從游標所在位置,到行尾的所有字元

  d0 刪除從游標所在位置,到行首的所有字元

  2、複製操作(yank)

  yy 複製游標所在行

  nyy 複製從游標所在行開始,向下的n行

  y1G 複製從游標所在行開始,到第一行的所有行

  yG 複製從游標所在行開始,到最後一行的所有行

  y$ 複製從游標所在位置,到行尾的所有字元

  y0 複製從游標所在位置,到行首的所有字元

  3、貼上操作(paste)

  p 小寫字母p,貼上剪貼簿中的資料,從游標所在行的下一行開始

  P 大寫字母P,貼上剪貼簿中的資料,從游標所在行的上一行開始

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

  u (Undo)撤銷上一個操作

  Ctrl+r (Redo)重做上一個操作

  5、重複操作

  . 重複上一操作

  6、替換操作(replace)

  r 替換游標所在處字元

  R 進入替換模式,直至按ESC退出

  cc 替換游標所在行

  cw 替換游標所在的英文單詞

  ~ 轉換大小寫

  7、排版操作

  :le<ft> 游標所在行左對齊

  :ri<ght> 游標所在行右對齊

  :ce<nter> 游標所在行居中

  (五)常用多緩衝區操作按鍵

  1、多檔案編輯模式

  (1)argument list模式,就是在開啟vim編輯器時,攜帶多個檔案路徑引數。

  (2)buffer list模式,就是在進入vim編輯器後,開啟多個緩衝區進行編輯。

  2、單一緩衝區開啟多個檔案

  :files 顯示目前開啟了哪些檔案

  :n 切換到下一個緩衝區內容

  :N 切換到上一個緩衝區內容

  :2n 切換到下下個緩衝區內容

  :bn 下一個緩衝區內容(buffer next)

  :bp 上一個緩衝區內容(buffer previous)

  3、多個緩衝區開啟多個檔案

  :sp [filename] 開啟一個新的緩衝區,如果有filename則內容為該檔案,否則為當前檔案

  Ctrl+w n 新建一個緩衝區

  Ctrl+w q 退出游標所在的緩衝區

  Ctrl+w j 游標移動到下一緩衝區

  Ctrl+w k 游標移動到上一緩衝區

  Ctrl+w l 游標移動到右一緩衝區

  Ctrl+w h 游標移動到左一緩衝區

  Ctrl+w v 左右切割視窗新建緩衝區

  Ctrl+w s 上下切割視窗新建緩衝區

  Ctrl+w o 使游標所在緩衝區最大化,其他緩衝區隱藏

  (六)常用搜尋與書籤操作快捷鍵

  1. 搜尋字串

  /string 向下搜尋字串“string”

  ?string 向上搜尋字串“string”

  2. 重複上次搜尋

  n 根據上次搜尋條件找到下一個匹配的字串

  N 根據上次搜尋條件找到上一個匹配的字串

  3. 搜尋單詞

  * 向下搜尋游標所在處的單詞(完全匹配)

  # 向上搜尋游標所在處的單詞(完全匹配)

  g* 向下搜尋游標所在處的單詞(部分匹配)

  g# 向上搜尋游標所在處的單詞(部分匹配)

  4. 標記書籤(mark)

  ma a為小寫字母,為游標所在處設定文件書籤a

  mA A為大寫字母,為游標所在處設定全域性書籤A

  5. 使用書籤(mark)

  `a 到文件書籤a處,Tab鍵上方

  ‘a 到文件書籤a所在行行首處,Enter鍵左邊

  `A 到全域性書籤A處,Tab鍵上方

  ‘A 到全域性書籤A所在行行首處,Enter鍵左邊

  `n 如果n=0,緩衝區將開啟上一次的文件,且游標在上次編輯最後的位置,1-9以此類推

  ‘n 如果n=0,緩衝區將開啟上一次的文件,且游標在上次編輯最後的位置所在行的行首,1-9以此類推

  6. 檢視書籤列表

  :marks 檢視當前所有書籤

  (七)關於加密

  1、加密你的文字檔案

  當你用vim開啟或新建一個檔案時,如果加上-x引數,即:

  vim -x filename

  那麼vim會提示你:

  Enter entryption key:

  當你輸入了密碼後,vim會提示你重複輸入以確認:

  Enter same key again:

  你在設定密碼的時候,是以*來顯示的,非明文。當下次有人(包括你自己)開啟該檔案的時候,vim就會提示:

  Need encryption key for “main.cpp”

  Enter encryption key:

  這時你只要輸入你之前所設定的密碼就可以了。如果你輸入的密碼是錯誤的,vim並不會提示你密碼錯誤,而是顯示一堆無意義的垃圾程式碼。

  2、解除加密與重設密碼

  開啟你已經加密的檔案,然後輸入:

  :set key=

  這樣,你的密碼就被設定為空了,今後進入就不再需要輸入密碼了。而如果你向重設密碼的話,你可以輸入:

  :X

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

  Enter entryption key: *****

  Enter sanme key again: *****

  3、加密引起的問題

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

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

  (2)如果對一個需要編譯的原始碼檔案進行了加密,則無法通過編譯器的語法檢查。

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

  set noswapfile

  二是在用vim開啟檔案之初就輸入命令:

  vim -x -n filename

  (注意-x是加密引數,與我們所說的swap沒有關係,不要搞混)

  三是在進入vim編輯該檔案後,輸入:

  :setlocal noswapfile

  不過不使用交換檔案的壞處就是,你可能會面臨資料丟失而無法找回的悲劇。所以又想用加密,又想不丟失檔案的朋友們,就勤按“:w”吧。

vim

  via:yuedu - 天使之淚

相關文章