1. 程式人生 > >Vim常用命令及配置方案

Vim常用命令及配置方案

幾句話

很久之前就接觸到vim,初學那陣覺得vim很酷炫,但確實對新手不是很友好。我也就簡單看了下基本操作就上手了,但又不是長期在vim下工作,這就導致了每一次重新使用vim都要再去回溫下基本操作,很是難受,所以就趁這個機會把基本操作都記錄下來,一來可以當做自己的筆記,二來希望可以幫到同樣和我一樣用過vim但卻忘得差不多的人。另外,這裡也記錄一下自己的vim配置,這個配置可能並沒有其他網友分享的那麼強大,但至少足夠簡單,能夠提高自己編碼的效率。

vim常用命令

首先先簡單梳理一下vim的工作模式。vim有三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)


這裡寫圖片描述
簡單來講就是,當我們剛開啟vim,或者使用vim打開了一個檔案,終端上顯示著檔案的內容,這時候就是命令模式(如上圖就是剛開啟一個檔案的情況,此時游標位於第一行行首處),在現在的情況下,鍵盤輸入小寫的i a o 或者大寫I A O中的其中一個,就可以進入輸入模式,各個按鍵的具體意義如下:

按鍵 具體意義
i 從目前游標所在處輸入
I 在目前所在行的第一個非空格符處開始輸入
a 從目前游標所在的下一個字元處開始輸入
A 從游標所在行的最後一個字元處開始輸入
o 在目前游標所在的下一行處輸入新的一行
O 在目前游標所在的上一行處輸入新的一行
r 繼續輸入一個字元以取代游標所在處後面單個字元,而後返回命令模式
R 新輸入的字元會一直取代游標所在處後面的字元

當我們使用上述按鍵進入輸入模式,配合方向鍵編輯好檔案內容後,使用ESC鍵可退出輸入模式,回到命令模式,vim的大部分命令都是在命令模式下使用。
命令模式下的按鍵十分豐富,主要的操作為游標移動、複製貼上、搜尋替換
游標移動的基本按鍵如下:

按鍵 具體意義
h 或 向左箭頭鍵(←) 游標向左移動一個字元
j 或 向下箭頭鍵(↓) 游標向下移動一行
k 或 向上箭頭鍵(↑) 游標向上移動一行
l 或 向右箭頭鍵(→) 游標向右移動一個字元

在上面的基礎上,如果你想游標的位置一次移動多行或者在同一行上移動多個字元,可以有以下幾種方法:

  • 直接輸入數字並在其後輸入相應的方向,例如輸入20j20↓表示游標向下移動20行,輸入20l20→表示游標向右移動20個字元。
  • 輸入數字後加空格可以使游標向右移動n個字元,例如20[space]即和上面第一條的20l20→達到相同的效果,為了簡單一點,我個人認為如果不是vim深度使用者的話,我們可以直接放棄記憶這個命令。同樣性質的命令還有20[enter],表示游標向下移動20行
  • ctrl+f/b/d/u可以用來上下翻頁,但是對大部分人來說沒有必要去記這個繁瑣的命令,我個人更加推薦使用鍵盤上的Page UpPage Down來上下翻頁
  • 0$可以用來移動游標到行首或行尾,同樣,我還是認為沒必要去記憶這個命令,而是直接使用HomeEnd來達到同樣的效果

另外,還有一些很方便的操作值得單獨拎出來進一下:

按鍵(區分大小寫) 具體意義
H(High) 游標移動到這個螢幕的最上方那一行的第一個字元
M(Middle) 游標移動到這個螢幕的中央那一行的第一個字元
L(Low) 游標移動到這個螢幕的最下方那一行的第一個字元
G 移動到這個檔案的最後一行(常用)
gg 移動到這個檔案的第一行(常用)
nG 移動到這個檔案的第n行

複製貼上的操作比較繁雜,但也並不是沒有規律可循,具體如下:

按鍵 具體意義
x或[delete] 刪除游標後面的單個字元,
X或[backspace] 刪除游標前面的單個字元
nx 連續向後刪除 n 個字元。同理,可以有大寫的nX
dd 刪除游標所在的一整行
ndd 刪除游標向下的n行(包括游標那一行)
d+某個位置 刪除游標處到那個位置的所有內容。例如d1G刪除從游標到第一行的所有內容,dG刪除從游標到最後一行的所有內容,d$d[End]刪除從游標處到行尾的所有字元。以此類推
yy 複製游標所在的那一行(常用)
nyy 複製游標向下的n行(包括游標那一行)
y+某個位置 複製選取的範圍,選取範圍如前面d+某個位置所示
p 將已複製的內容在下一行貼上
P 將已複製的內容在上一行貼上
J 將游標所在行與下一行的資料結合成同一行,即在刪除該行和下一行之間的換行符。
u 復原前一個動作(常用)
[ctrl]+r 重做上一個動作(常用)
.(小數點) 重複前一個動作(常用)

搜尋替換部分為了簡潔一點,就只提一下搜尋,替換部分就不涉及了

按鍵 具體意義
/[要搜尋的字元] 向光標之下尋找一個匹配的字串。如/int會搜尋匹配int
?[要搜尋的字元] 向光標之上尋找一個匹配的字串。

在上面搜尋字串的基礎上按回車鍵,就可使游標跑到搜尋到的字串處,這時輸入n游標就會跳到下一個或上一個匹配的字串處,具體是上還是下取決於剛才執行的是/string還是?string,而輸入大寫的N則是與小寫n相反的方向。(注意,當執行n到達檔案底部時就會迴圈跳到頂部,反之亦然)

好了,現在我們已經能夠編輯檔案內容了,那怎樣儲存檔案呢?一般情況下,當需要儲存或退出檔案時,我們習慣性按一下ESC鍵以進入命令模式(當然如果已經在命令模式下也習慣性按一下吧),這時輸入加相應的指令就能對檔案執行相應的操作,這裡需要注意一點的就是,如果你對該檔案沒有相應的許可權,那麼執行相關操作將會被拒絕,例如我在ubuntu下想要修改我沒有許可權的檔案,vim會提示許可權拒絕,我需要執行sudo vim filename以root許可權進入vim才能修改檔案。

按鍵 具體意義
:w 儲存編輯的內容
:w! 若檔案屬性為只讀,強制儲存編輯的內容,需要相應的許可權
:q 退出vim
:q! 強制離開不儲存編輯過的內容
:wq 儲存後退出vim
:wq! 強制儲存後退出vim
ZZ 若檔案沒有改動,則不儲存離開,若檔案已經被改動過,則儲存後離開!
:w filename 另存為filename
:! command 暫時離開vim到命令列模式下執行 command 的顯示結果!例如『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案資訊!

與系統剪下板互動

這裡還要重點提一下vim與系統之間如何進行貼上複製,我們知道,上面的貼上複製命令只能在vim裡面使用,無法將vim裡面的內容複製出來或者將外面的內容貼上進去,這將大大降低了我們CV鍵的威力,所以怎麼辦呢?

  1. 首先檢視vim版本是否支援clipboard
    vim --version | grep "clipboard"
    如果顯示clipboard前面有一個小小的減號,說明不支援。
  2. 不支援的話需要安裝圖形化介面的vim,使用如下命令
    sudo apt-get install vim-gnome
  3. 安裝好了之後使用“+y進行復制,使用”+p進行貼上,配合使用vV選中內容

-
當然,如果你覺得上面的命令太複雜了,你可以在下面所述的配置檔案里加上set clipboard=unnamedplus 這樣就可以直接使用 y p命令貼上複製了。

配置方案

這個只是一個簡單的vim配置,留下了一些我認為必要的功能,沒有那麼多花俏的功能,也不像網上一些文章分享的配置成酷炫的IDE,我個人一貫的原則就是簡潔明瞭,使用方便即可。
使用方法:儲存成名為.vimrc的檔案放在目錄下,即使用者個人目錄下即可。

"********************************************************
"                   一般性配置                          *
"********************************************************

"關閉vim一致性原則,避免以前版本的一些bug和侷限
set nocompatible

"顯示行號
set number

"設定在編輯過程中右下角顯示游標的行列資訊
set ruler

"在狀態列顯示正在輸入的命令
set showcmd

"設定歷史記錄條數
set history=1000

"設定取消備份 禁止臨時檔案的生成
set nobackup
set noswapfile

"設定匹配模式,類似當輸入一個左括號時會匹配相應的那個右括號
set showmatch

"設定C/C++方式自動對齊
set autoindent
set cindent

"開啟語法高亮功能
syntax enable
syntax on

"指定配色方案為256色
set t_Co=256

"設定搜尋時忽略大小寫
set ignorecase

"實時顯示搜尋結果
set incsearch

"配置backspace的工作方式
set backspace=indent,eol,start

"設定在vim中可以使用滑鼠
set mouse=a

"設定tab寬度
set tabstop=4

"設定自動對齊空格數
set shiftwidth=4

"設定退格鍵時可以刪除4個空格
set smarttab
set softtabstop=4

"將tab鍵自動轉換為空格
set expandtab

"設定編碼方式
set encoding=utf-8

"自動判斷編碼時 依次嘗試以下編碼
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

"檢測檔案型別
filetype on

"針對不同的檔案採取不同的縮排方式
filetype indent on

"啟動智慧補全
filetype plugin indent on

"括號自動補全
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap < <><ESC>i

"直接使用y p進行系統級複製貼上
set clipboard=unnamedplus