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 或 向右箭頭鍵(→) | 游標向右移動一個字元 |
在上面的基礎上,如果你想游標的位置一次移動多行或者在同一行上移動多個字元,可以有以下幾種方法:
- 直接輸入數字並在其後輸入相應的方向,例如輸入
20j
或20↓
表示游標向下移動20行,輸入20l
或20→
表示游標向右移動20個字元。 - 輸入數字後加空格可以使游標向右移動n個字元,例如
20[space]
即和上面第一條的20l
或20→
達到相同的效果,為了簡單一點,我個人認為如果不是vim深度使用者的話,我們可以直接放棄記憶這個命令。同樣性質的命令還有20[enter]
,表示游標向下移動20行 ctrl+f/b/d/u
可以用來上下翻頁,但是對大部分人來說沒有必要去記這個繁瑣的命令,我個人更加推薦使用鍵盤上的Page Up
和Page Down
來上下翻頁0
和$
可以用來移動游標到行首或行尾,同樣,我還是認為沒必要去記憶這個命令,而是直接使用Home
和End
來達到同樣的效果
另外,還有一些很方便的操作值得單獨拎出來進一下:
按鍵(區分大小寫) | 具體意義 |
---|---|
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鍵的威力,所以怎麼辦呢?
- 首先檢視vim版本是否支援clipboard
vim --version | grep "clipboard"
如果顯示clipboard前面有一個小小的減號,說明不支援。 - 不支援的話需要安裝圖形化介面的vim,使用如下命令
sudo apt-get install vim-gnome
- 安裝好了之後使用
“+y
進行復制,使用”+p
進行貼上,配合使用v
或V
選中內容
-
當然,如果你覺得上面的命令太複雜了,你可以在下面所述的配置檔案里加上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