1. 程式人生 > >ubuntu下安裝並配置VIM編輯器

ubuntu下安裝並配置VIM編輯器

Ubuntu 16.04 下安裝Vim

預設已經安裝了VIM-tiny

  1. [email protected]:~$ locate vi | grep 'vi$' |xargs ls -al

  2. lrwxrwxrwx 1 root root 17 12月 9 21:12 /etc/alternatives/vi -> /usr/bin/vim.tiny

  3. lrwxrwxrwx 1 root root 20 12月 9 21:13 /usr/bin/vi -> /etc/alternatives/vi

  4. -rw-r--r-- 1 root root 59 12月 23 2015 /usr/lib/x86_64-linux-gnu/espeak-data/voices/asia/vi

  5. -rw-r--r-- 1 root root 1415 11月 11 2015 /usr/share/bash-completion/completions/ldapvi

  6. -rw-r--r-- 1 root root 475 4月 21 2016 /var/lib/dpkg/alternatives/vi

下面我們以Ubuntu14.04(Unity)安裝完整版VIM(VIM-basic)為例:

在終端輸入以下命令,則會自動安裝:

sudo apt-get install vim

自動安裝完之後,可以使用以下命令進行檢視:

已經新增到系統

update-alternatives --display vi

檢視版本

vim --version

VIM配置

注:只對各個使用者在自己的當前目錄下的.vimrc修改的話,修改內容只對本使用者有效,要想全部有效,可以修改/etc/vim/vimrc.

在終端下使用vim進行編輯時,預設情況下,編輯的介面上是沒有顯示行號、語法高亮度顯示、智慧縮排等功能的。為了更好的在vim下進行工作,需要手動設定一個配置檔案:.vimrc。

啟動vim時,當前使用者根目錄下的.vimrc檔案會被自動讀取,該檔案可以包含一些設定甚至指令碼,所以,一般情況下把.vimrc檔案建立在當前使用者的根目錄下比較方便,即建立的命令為

$vi ~/.vimrc

設定完後 :x或者:x或者wq 進行儲存退出即可。

下面給出一個例子,其中列出了經常用到的設定,詳細的設定資訊請參照參考資料

基本配置[1] [2]

  1. "開啟語法高亮

  2. syntax on

  3. "依檔案型別設定自動縮排

  4. filetype indent plugin on

  5. "顯示當前的行號列號:

  6. set ruler

  7. "在狀態列顯示正在輸入的命令

  8. set showcmd

  9. "關閉/開啟配對括號高亮

  10. "NoMatchParen

  11. DoMatchParen

  12. 行號的顯示與隱藏[3]:

  13. "顯示行號:

  14. set number

  15. "為方便複製,用<F2>開啟/關閉行號顯示:

  16. nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>

啟用Modeline(即允許被編輯的檔案以註釋的形式設定Vim選項,詳見Vim Wiki: Modeline magic)[4]:

set modeline

如果終端使用的是深色背景:

  1. "為深色背景調整配色

  2. set background=dark

外掛管理

下文的配置很多都依賴於第三方開發的 Vim 外掛。為了方便地安裝和維護這些外掛,推薦先安裝一種外掛管理工具,目前較為流行的是 Vundle 和 pathogen。二者功能類似,但 Vundle 的配置更靈活, pathogen 則相對簡潔。二者都能很好地與Git結合,安裝外掛十分方便。

如果你使用 Git 管理你的配置檔案,那麼還可以將 Pathogen 或 Vundle 與 Git 的 Submodule 功能管理外掛結合[5],使得在多臺電腦間同步外掛及在本地更新外掛變得十分便捷。

  1. # 在存放配置檔案的主資料夾下,新增一個 submodule

  2. git submodule add https://github.com/gmarik/vundle.git .vim/bundle/vundle

  3. # 用類似的辦法新增多個外掛後,以後升級外掛只需:

  4. git submodule update

  5. # 如果其它電腦 checkout 出配置檔案後,要先:

  6. git submodule init

外掛管理工具無需通過系統的包管理系統安裝,只要將需要的檔案放在 ~/.vim/目錄中即可。這樣,一套配置檔案也可以方便地用在多個不同的系統環境中。

程式碼補全

Vim 7已經內建了程式碼補全功能[6],補全操作可分為兩種:

關鍵字補全

即簡單地補全到文件中已有的詞,快捷鍵為 Ctrl-N 或 Ctrl-P。

智慧補全

Vim 7中引入 Omni Complete,可根據語義補全,快捷鍵為 Ctrl-X Ctrl-O。 Vim的補全選單操作方式與一般IDE的方式不同,可加入如下設定[7]:

  1. "讓Vim的補全選單行為與一般IDE一致(參考VimTip1228)

  2. set completeopt+=longest

  3. "離開插入模式後自動關閉預覽視窗

  4. autocmd InsertLeave * if pumvisible() == 0|pclose|endif

  5. "回車即選中當前項

  6. inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"

  7. "上下左右鍵的行為

  8. inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"

  9. inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"

  10. inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"

  11. inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

如需自動補全,可安裝AutoComplPop外掛,安裝後如需在補全是顯示文件(預覽),可加入設定:

let g:acp_completeoptPreview = 1

註釋管理

經常要將一段程式碼註釋掉或取消註釋,而尤其對於某些只支援單行註釋的語言來說,逐行加註釋很麻煩,這時快速註釋(或取消註釋)程式碼的外掛就顯得很有用了。

常見的註釋管理外掛為The NERD Commenter,預設支援多種語言,使用方法也很簡單:只需在可視(V)模式中選擇一段程式碼,按下\cc加逐行註釋,\cu取消註釋,\cm新增塊註釋。

如有其它需求,也可考慮comments、EnhCommentify等外掛。

縮排

使用自動縮排可能需要設定,vim中對自動縮排的詳細設定辦法見Vim程式碼縮排設定。

在不同的模式中調整縮排的方法不同:

插入模式

Ctrl-T增加縮排,Ctrl-D減小縮排。

命令模式

>> 右縮排, << 左縮排,注意n<< 或 n>>是縮排多行,如4>>

可視模式

< 、 > 用於左右縮排, n< 、 n> 可做多節縮排,如 2> 。 另外,= 可對選中的部分進行自動縮排;]p可以實現p的貼上功能,並自動縮排。

程式碼瀏覽與跳轉

程式碼跳轉類似於IDE中的Ctrl+點選功能。與程式碼補全類似,程式碼瀏覽工具亦可分為基於文字分析的和基於程式碼理解的兩類。

簡單程式碼跳轉

在命令模式下可直接使用下述指令:[8]

跳轉到定義

gd到區域性變數的定義,gD到全域性變數的定義

搜尋

*, # 可對游標處的詞向前/向後做全詞搜尋,g*, g# 做相對應的非全詞匹配搜尋

程式碼塊首尾

[[, ]] 可跳到當前程式碼塊起始或結束的大括號處。

括號首尾

% 可在配對的括號、塊首尾之前跳轉。

位置歷史

Ctrl-O 在歷史記錄中後臺,Ctrl-I 則為前進。

基於程式碼理解的跳轉

該功能依賴於ctags工具。[9]安裝好ctags後,在存放程式碼的資料夾執行

ctags -R .

即可生成一個描述程式碼結構的tags檔案。

提示: ctags的功能很強大,更詳細的配置請參考其文件。

建議在~/.vimrc中新增如下配置以使Vim在父目錄中尋找tags檔案[10]:

set tags=tags;/

設定好後,可在Vim中使用如下功能:Ctrl-]轉至最佳匹配的相應Tag,Ctrl-T返回上一個匹配。如果有多個匹配,g Ctrl-]可顯示所有備選的tags。如有需要,可互換Ctrl-]和g Ctrl-] [11]:

  1. "在普通和可視模式中,將<c-]>與g<c-]>互換

  2. nnoremap <c-]> g<c-]>

  3. vnoremap <c-]> g<c-]>

  4. nnoremap g<c-]> <c-]>

  5. vnoremap g<c-]> <c-]>

就地編譯和錯誤處理

使用:make可呼叫make命令編譯程式,配合Vim內建的QuickFix功能,可以像IDE一樣開啟一個視窗展示編譯錯誤和警告,通過它還可以方便地跳轉到各編譯錯誤的產生位置。

常用的命令有:cw[indow](如有錯誤開啟quickfix視窗)、:cn(跳到下一個錯誤)、:cp(跳到前一個錯誤)等,具體可:help quickfix。

如果想在有錯時自動開啟quickfix視窗[12]:

  1. " 編譯後,如有錯誤則開啟quickfix視窗。(游標仍停留在原始碼視窗)

  2. "

  3. " 注意:需要開啟netsting autocmd

  4. autocmd QuickFixCmdPost [^l]* nested cwindow

  5. autocmd QuickFixCmdPost l* nested lwindow

預設情況下,:mak[e]會跳轉到第一個錯誤,如果不想啟用這個功能,請使用:make!。

程式碼摺疊

程式碼較長時可啟用程式碼摺疊功能,如按語法高亮元素摺疊:

  1. set foldmethod=syntax

  2. "預設情況下不折疊

  3. set foldlevel=99

隨後即可使用z系列命令管理程式碼摺疊。如za會翻轉當前位置的摺疊狀態,zA會遞迴翻轉當前層所有程式碼的摺疊狀態等。當然也可以把功能鍵對映到za:

map <F3> za

檢視文件

K 鍵可用於檢視當前函式的文件。

其它外掛

近來仍被積極維護的程式碼託管在 GitHub 上的外掛[13]:

  1. Fugitive 讓 Vim 更好地與 Git 整合。
  2. Powerline 炫麗實用的狀態
  3. Tagbar 比 taglist 更現代的程式碼結構瀏覽工具
  4. The NERD tree 以樹形結構瀏覽資料夾中的檔案
  5. Syntastic 語法檢查
  6. surround.vim 快速刪除/修改游標周圍配對的括號 其它常用外掛[14]:

Project 方便管理工程中的檔案

snipmate.vim 在編輯中實現模板展開

a.vim 在.cpp/.h等檔案對中跳轉

matchit.zip 增強%的功能

winmanager 將檔案管理視窗和taglist堆疊起來。

Ubuntu 16.04 下安裝Vim

預設已經安裝了VIM-tiny

  1. [email protected]:~$ locate vi | grep 'vi$' |xargs ls -al

  2. lrwxrwxrwx 1 root root 17 12月 9 21:12 /etc/alternatives/vi -> /usr/bin/vim.tiny

  3. lrwxrwxrwx 1 root root 20 12月 9 21:13 /usr/bin/vi -> /etc/alternatives/vi

  4. -rw-r--r-- 1 root root 59 12月 23 2015 /usr/lib/x86_64-linux-gnu/espeak-data/voices/asia/vi

  5. -rw-r--r-- 1 root root 1415 11月 11 2015 /usr/share/bash-completion/completions/ldapvi

  6. -rw-r--r-- 1 root root 475 4月 21 2016 /var/lib/dpkg/alternatives/vi

下面我們以Ubuntu14.04(Unity)安裝完整版VIM(VIM-basic)為例:

在終端輸入以下命令,則會自動安裝:

sudo apt-get install vim

自動安裝完之後,可以使用以下命令進行檢視:

已經新增到系統

update-alternatives --display vi

檢視版本

vim --version

VIM配置

注:只對各個使用者在自己的當前目錄下的.vimrc修改的話,修改內容只對本使用者有效,要想全部有效,可以修改/etc/vim/vimrc.

在終端下使用vim進行編輯時,預設情況下,編輯的介面上是沒有顯示行號、語法高亮度顯示、智慧縮排等功能的。為了更好的在vim下進行工作,需要手動設定一個配置檔案:.vimrc。

啟動vim時,當前使用者根目錄下的.vimrc檔案會被自動讀取,該檔案可以包含一些設定甚至指令碼,所以,一般情況下把.vimrc檔案建立在當前使用者的根目錄下比較方便,即建立的命令為

$vi ~/.vimrc

設定完後 :x或者:x或者wq 進行儲存退出即可。

下面給出一個例子,其中列出了經常用到的設定,詳細的設定資訊請參照參考資料

基本配置[1] [2]

  1. "開啟語法高亮

  2. syntax on

  3. "依檔案型別設定自動縮排

  4. filetype indent plugin on

  5. "顯示當前的行號列號:

  6. set ruler

  7. "在狀態列顯示正在輸入的命令

  8. set showcmd

  9. "關閉/開啟配對括號高亮

  10. "NoMatchParen

  11. DoMatchParen

  12. 行號的顯示與隱藏[3]:

  13. "顯示行號:

  14. set number

  15. "為方便複製,用<F2>開啟/關閉行號顯示:

  16. nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>

啟用Modeline(即允許被編輯的檔案以註釋的形式設定Vim選項,詳見Vim Wiki: Modeline magic)[4]:

set modeline

如果終端使用的是深色背景:

  1. "為深色背景調整配色

  2. set background=dark

外掛管理

下文的配置很多都依賴於第三方開發的 Vim 外掛。為了方便地安裝和維護這些外掛,推薦先安裝一種外掛管理工具,目前較為流行的是 Vundle 和 pathogen。二者功能類似,但 Vundle 的配置更靈活, pathogen 則相對簡潔。二者都能很好地與Git結合,安裝外掛十分方便。

如果你使用 Git 管理你的配置檔案,那麼還可以將 Pathogen 或 Vundle 與 Git 的 Submodule 功能管理外掛結合[5],使得在多臺電腦間同步外掛及在本地更新外掛變得十分便捷。

  1. # 在存放配置檔案的主資料夾下,新增一個 submodule

  2. git submodule add https://github.com/gmarik/vundle.git .vim/bundle/vundle

  3. # 用類似的辦法新增多個外掛後,以後升級外掛只需:

  4. git submodule update

  5. # 如果其它電腦 checkout 出配置檔案後,要先:

  6. git submodule init

外掛管理工具無需通過系統的包管理系統安裝,只要將需要的檔案放在 ~/.vim/目錄中即可。這樣,一套配置檔案也可以方便地用在多個不同的系統環境中。

程式碼補全

Vim 7已經內建了程式碼補全功能[6],補全操作可分為兩種:

關鍵字補全

即簡單地補全到文件中已有的詞,快捷鍵為 Ctrl-N 或 Ctrl-P。

智慧補全

Vim 7中引入 Omni Complete,可根據語義補全,快捷鍵為 Ctrl-X Ctrl-O。 Vim的補全選單操作方式與一般IDE的方式不同,可加入如下設定[7]:

  1. "讓Vim的補全選單行為與一般IDE一致(參考VimTip1228)

  2. set completeopt+=longest

  3. "離開插入模式後自動關閉預覽視窗

  4. autocmd InsertLeave * if pumvisible() == 0|pclose|endif

  5. "回車即選中當前項

  6. inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"

  7. "上下左右鍵的行為

  8. inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"

  9. inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"

  10. inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"

  11. inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

如需自動補全,可安裝AutoComplPop外掛,安裝後如需在補全是顯示文件(預覽),可加入設定:

let g:acp_completeoptPreview = 1

註釋管理

經常要將一段程式碼註釋掉或取消註釋,而尤其對於某些只支援單行註釋的語言來說,逐行加註釋很麻煩,這時快速註釋(或取消註釋)程式碼的外掛就顯得很有用了。

常見的註釋管理外掛為The NERD Commenter,預設支援多種語言,使用方法也很簡單:只需在可視(V)模式中選擇一段程式碼,按下\cc加逐行註釋,\cu取消註釋,\cm新增塊註釋。

如有其它需求,也可考慮comments、EnhCommentify等外掛。

縮排

使用自動縮排可能需要設定,vim中對自動縮排的詳細設定辦法見Vim程式碼縮排設定。

在不同的模式中調整縮排的方法不同:

插入模式

Ctrl-T增加縮排,Ctrl-D減小縮排。

命令模式

>> 右縮排, << 左縮排,注意n<< 或 n>>是縮排多行,如4>>

可視模式

< 、 > 用於左右縮排, n< 、 n> 可做多節縮排,如 2> 。 另外,= 可對選中的部分進行自動縮排;]p可以實現p的貼上功能,並自動縮排。

程式碼瀏覽與跳轉

程式碼跳轉類似於IDE中的Ctrl+點選功能。與程式碼補全類似,程式碼瀏覽工具亦可分為基於文字分析的和基於程式碼理解的兩類。

簡單程式碼跳轉

在命令模式下可直接使用下述指令:[8]

跳轉到定義

gd到區域性變數的定義,gD到全域性變數的定義

搜尋

*, # 可對游標處的詞向前/向後做全詞搜尋,g*, g# 做相對應的非全詞匹配搜尋

程式碼塊首尾

[[, ]] 可跳到當前程式碼塊起始或結束的大括號處。

括號首尾

% 可在配對的括號、塊首尾之前跳轉。

位置歷史

Ctrl-O 在歷史記錄中後臺,Ctrl-I 則為前進。

基於程式碼理解的跳轉

該功能依賴於ctags工具。[9]安裝好ctags後,在存放程式碼的資料夾執行

ctags -R .

即可生成一個描述程式碼結構的tags檔案。

提示: ctags的功能很強大,更詳細的配置請參考其文件。

建議在~/.vimrc中新增如下配置以使Vim在父目錄中尋找tags檔案[10]:

set tags=tags;/

設定好後,可在Vim中使用如下功能:Ctrl-]轉至最佳匹配的相應Tag,Ctrl-T返回上一個匹配。如果有多個匹配,g Ctrl-]可顯示所有備選的tags。如有需要,可互換Ctrl-]和g Ctrl-] [11]:

  1. "在普通和可視模式中,將<c-]>與g<c-]>互換

  2. nnoremap <c-]> g<c-]>

  3. vnoremap <c-]> g<c-]>

  4. nnoremap g<c-]> <c-]>

  5. vnoremap g<c-]> <c-]>

就地編譯和錯誤處理

使用:make可呼叫make命令編譯程式,配合Vim內建的QuickFix功能,可以像IDE一樣開啟一個視窗展示編譯錯誤和警告,通過它還可以方便地跳轉到各編譯錯誤的產生位置。

常用的命令有:cw[indow](如有錯誤開啟quickfix視窗)、:cn(跳到下一個錯誤)、:cp(跳到前一個錯誤)等,具體可:help quickfix。

如果想在有錯時自動開啟quickfix視窗[12]:

  1. " 編譯後,如有錯誤則開啟quickfix視窗。(游標仍停留在原始碼視窗)

  2. "

  3. " 注意:需要開啟netsting autocmd

  4. autocmd QuickFixCmdPost [^l]* nested cwindow

  5. autocmd QuickFixCmdPost l* nested lwindow

預設情況下,:mak[e]會跳轉到第一個錯誤,如果不想啟用這個功能,請使用:make!。

程式碼摺疊

程式碼較長時可啟用程式碼摺疊功能,如按語法高亮元素摺疊:

  1. set foldmethod=syntax

  2. "預設情況下不折疊

  3. set foldlevel=99

隨後即可使用z系列命令管理程式碼摺疊。如za會翻轉當前位置的摺疊狀態,zA會遞迴翻轉當前層所有程式碼的摺疊狀態等。當然也可以把功能鍵對映到za:

map <F3> za

檢視文件

K 鍵可用於檢視當前函式的文件。

其它外掛

近來仍被積極維護的程式碼託管在 GitHub 上的外掛[13]:

  1. Fugitive 讓 Vim 更好地與 Git 整合。
  2. Powerline 炫麗實用的狀態
  3. Tagbar 比 taglist 更現代的程式碼結構瀏覽工具
  4. The NERD tree 以樹形結構瀏覽資料夾中的檔案
  5. Syntastic 語法檢查
  6. surround.vim 快速刪除/修改游標周圍配對的括號 其它常用外掛[14]:

Project 方便管理工程中的檔案

snipmate.vim 在編輯中實現模板展開

a.vim 在.cpp/.h等檔案對中跳轉

matchit.zip 增強%的功能

winmanager 將檔案管理視窗和taglist堆疊起來。