這里有個女程序員寫的VIM配置文件,寫的很好推薦下:
Vim 配置選項可以在 Vim 命令行模式下通過 :set 配置選項xxx 的形式執行,也可以通過 set 配置選項xxx 的格式保在配置文件中被 Vim 加載執行。Vim的配置文件 (例如 ~/.vimrc) 其實是多個個性化 Vim 配置選項(Vim options)的集合。每個 Vim 配置項都有對應的關閉選項,即 set no配置選項xxx 可關閉 配置選項xxx。例如,set number 表示顯示行號,而 set nonumber 則表示不顯示行號。
Vim教程網介紹一個非常流行、且格式規范的無插件型的配置文件 (來自https://github.com/wklken/vim-for-server,並通過分析每一個Vim配置選項的含義和功能。
注:如果不太理解某個配置選項的含義,推薦使用 vim -u NONE -N 某文件xxx 的方式使得 Vim 在啟動時不加載任何配置文件,然后在命令行模式下單獨設置該配置項,通過查看設置前后的變化來理解該配置項的含義和功能。(啟動參數 -N 會打開 nocompatible 選項,防止進入 Vi 兼容模式)。
1、Vim基礎配置
1 |
set nocompatible " don't bother with vi compatibility " |
nocompatible 用於關閉 compatible,表示不與 Vi 兼容。autoread 表示如果當前文件在 Vim 外被修改且未在 Vim 里面重新載入的話,則自動重新讀取。
shortmess 選項用於設置Vim縮短消息長度的標志位列表,例如,shortmess=m 表示用 “[+]” 代替 “[Modified]”,推薦通過 :h shortmess 查看 shortmess 選項的詳細介紹。
magic 選項用於改變搜索模式使用的特殊字符,推薦閱讀Vim搜索字符轉義與magic搜索模式。title 用於設置 Vim 窗口標題。
nobackup 用於關閉 backup,設置覆蓋文件時不保留備份文件。
noerrorbells 用於關閉 errorbells 選項,表示 Vim 有錯誤信息時不響鈴。visualbell 表示使用可視響鈴代替鳴叫,而顯示可視響鈴的終端代碼由 t_vb 選項給出。如
果既不想要響鈴也不想要閃爍,使用 :set visualbell t_vb= 實現。
timeoutlen 表示以毫秒計的等待鍵碼或映射的鍵序列完成的時間,推薦閱讀Vim操作符待決模式(Vim Operator-Pending mode)。
2、Vim編碼設置
1 |
set encoding=utf-8 |
encoding 設置 Vim 內部使用的字符編碼,它應用於緩沖區、寄存器、表達式所用的字符。fileencodings 設置一個字符編碼的列表,表示 Vim 自動檢測文件編碼時的備選字符編碼列表。fileformats 用於設置參與自動檢測換行符 () 格式類型的備選列表。
termencoding 用於設置終端使用的編碼方式。
formatoptions 表示自動排版完成的方式。Vim 在可視化模式下,可使用 = 進行代碼格式的自動排版。m 表示在任何值高於 255 的多字節字符上分行;B 表示在連接行時,不要在兩個多字節字符之間插入空格。
3、Vim界面顯示設置
1 |
set ruler " show the current row and column " |
ruler 用於顯示當前光標所在位置的行號和列號 (逗號分隔)。如果還有空間,在最右端顯示文本在文件中的相對位置。

number 用於設置顯示行號。nowrap 設置超過窗口寬度的行不自動回繞顯示。
showcmd 用於設置在屏幕最后一行顯示 (部分的) 命令。showmode 在插入、替換和可視模式里,在最后一行提供消息。
showmatch 表示插入括號時短暫地跳轉到與之匹配的對應括號,而停留的時間由 matchtime 選項設置。如果置位 ‘showmatch’,matchtime 表示顯示配對括號的十分之一秒。
4、Vim查找配置
1 |
set hlsearch " highlight searches " |
hlsearch 用於設置將搜索結果高亮顯示,而 incsearch 選項會讓 Vim 根據已經在查找域中輸入的文本,預覽第一處匹配目標;每當新輸入一個字符時,Vim 會即時更新預覽內容。
當 ignorecase 和 smartcase 選項均打開時,如果搜索模式中包含大寫字母,Vim就會認為當前的查找(搜索)是區分大小寫的。如果搜索模式中不包含任何大寫字母,Vim 則會認為搜索應該不區分大小寫。這是個比較 ”智能的” 推測你搜索意圖的機制。
推薦閱讀:Vim增量查找與incsearch實時查找預覽、Vim搜索命令使用方法和技巧。
5、Vim Tab制表符設置
1 |
set expandtab " expand tabs to spaces " |
expandtab 選項用於設置在Vim插入模式下按下 Tab 鍵時,輸入到Vim中的都是空格。smarttab 表示插入 Tab 時使用 shiftwidth。
shiftround 表示縮進列數對齊到 shiftwidth 值的整數倍。參考:Vim自動縮進配置、原理和tab鍵制表符。
6、Vim縮進配置
1 |
set autoindent smartindent shiftround |
autoindent 用於設置新增加的行和前一行具有相同的縮進形式。smartindent 選項用於設置新增行時進行”智能”縮進,主要用於 C 語言一族,與 cindent 選項類似。在Vim smartindent 縮進模式下,每一行都有相同的縮進量,直到遇到右大括號 (}) 取消縮進形式。
shiftwidth 選項用於設置執行Vim普通模式下的縮進操作 ( << 和 >> 命令 )時縮進的列數。而 shiftround 選項則表示縮進列數會自動取整到 ‘shiftwidth’ 選項值的倍數。
tabstop 選項設置按下 Tab 鍵時,縮進的空格個數。
7、Vim顯示當前光標位置
1 |
set cursorcolumn |
cursorcolumn 設置高亮顯示光標當前所在列,cursorline 設置高亮顯示光標所在屏幕行。更多內容,請閱:Vim快速跳轉任意行、任意列以及高亮顯示當前行、當前列。

8、Vim文件類型設置
1 |
filetype on |
filetype on 配置項是 Vim 文件類型檢測功能的開關;filetype plugin on 用於 Vim 打開加載文件類型插件功能;filetype indent on 用於指定 Vim 為不同類型的文件定義不同的縮進格式。
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab ai 表示對於 Python 文件 (通過 autocmd 命令指示 Vim 監聽 FileType 事件),自動設置 Tab 鍵對應的空格個數等。
autocmd BufNewFile *.sh,*.py exec \":call AutoSetFileHead()\" 表示新建后綴為 .sh、.py 的文件時,自動執行 AutoSetFileHead 函數。AutoSetFileHead 函數基本的邏輯是在新文件的首行自動插入部分內容,例如,新建 shell 腳本自動添加 #!/bin/bash”,然后新增兩個空白行 (通過 normal G、normal o、normal o 三行實現)。
注:AutoSetFileHead 函數里使用了 normal 命令,可以閱讀《Vim normal命令和重復操作》了解該命令的細節。
9、Vim按鍵映射配置
以下Vim按鍵映射配置的詳細功能介紹,請閱讀:《常用Vim命令及實用Vim按鍵映射配置詳解》。
1 |
nnoremap k gk |
nnoremap gk k 表示將 gk 按鍵映射為 k,從Vim光標移動之實際行與屏幕行一文可知,gk 表示上移一個屏幕行。
cnoremap <C-a> <Home> 表示將 <Ctrl> a 組合鍵映射為 Home 鍵,實現在 Vim 命令行模式下 按 <Ctrl> a 移動光標到最前面,類似於《高效Linux技巧及Vim命令》一文提到的快速移動光標到行首的效果。

