歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Ubuntu安裝vim插件的步驟

Ubuntu安裝vim插件的步驟

日期:2017/3/2 10:31:42   编辑:Linux維護

Source Insight是一款編輯器,擁有強大的功能,但適用於Windows系統,那麼Ubuntu系統該使用哪種編輯器呢?Vim就是Linux下很好的編輯器,下面小編就給大家介紹下如何在Ubuntu上安裝vim插件。

source insight是windows下的優秀編輯器,適合閱讀管理代碼,主要有以下功能:

查找函數,變量或者宏的定義。

查找函數,變量或者宏的引用位置。

查找函數被調用的位置

查找某個符號在工程內的所有匹配

由於unix哲學主張一個工具只做好一件事情,所以linux下並沒有這種集多樣功能於一體的軟件。vim是非常優秀的編輯器,本文介紹如何通過安裝插件將vim武裝成和source insight一樣甚至更強大的工具。

我的環境是ubuntu12.04 LTS+vim version 7.3

1. ctags

ctags插件用來查找函數,變量或者宏的定義,ubuntu下可以非常方便的安裝,

sudo apt-get install exuberant-ctag

在源文件目錄下執行命令

ctags -R

會生成一個tags文件,裡面包含了所有源文件的符號信息。在vim中,快捷鍵ctrl+]會跳到當前函數的定義處。為了方便生產tags,設置快捷鍵F5生成tag,將下面命令加入到~/.vimrc

nnoremap 《F5》 :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q 。《CR》

nnoremap 表示vim普通模式的鍵映射,

--c++-kinds=+p : 為標簽添加函數原型(prototype)信息

--fields=+iaS : 為標簽添加繼承信息(inheritance),訪問控制(access)信息,函數特征(function Signature,如參數表或原型等)

--extra=+q : 為類成員標簽添加類標識

如果項目有多層文件結構,一般只在根目錄生成一個tag文件,那麼子目錄訪問不到tag文件,在子目錄中直接打開源文件將找不到函數的tag,一個方便的做法是在.vimrc中將tag加到tags的查找路徑中,每個項目一項。

“project1”

set tags+=/project1/tags

ctags的快捷鍵:

ctrl+] 切換到定義處

g+ctrl+] 如果多處匹配,列出匹配tag列表供選擇

count+ctrl+t 後退count個tag

:count+tag 前進count個tag

:ts 列出匹配tag列表,存在多個匹配時

:tn 跳到下一處匹配tag

:tp 跳到上一處匹配tag

:tf 跳到地一個匹配tag

:tl 跳到最後一個匹配tag

:set tags? 查看tags文件路徑

2.cscope

Ctags只能找到符號定義的地方,如果要像sourceinsight一樣,具備查找類似函數調用查找,符號引用查找等高級功能,就要借助於cscope了。Cscope是類似於ctags的工具,不過它的功能比ctags強大多了。

在當前源文件目錄下執行

cscope–Rbq

其中

-R:遞歸處理子層目錄

-b:生成數據庫後自動退出

-q:生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

vim打開源文件後,增加cscope數據庫到當前環境中

:csadd cscope.out

可以發現執行後沒有反應,那是因為沒有打開cscopeverbose選項,打開後增加數據庫後會顯示成功還是失敗信息,默認是關閉的,我們把它打開。

:setcsverb

想要查看當前已經加載了哪些cscope數據庫

:csshow

想要刪除某個數據庫

:cskill #

安裝ctags和cscope後,就有兩種數據庫了,默認會同時查看cscope和ctag數據庫,這個行為由cst控制,默認是打開的。

:setcst

Csto控制查看數據庫的順序,等於0時優先查看cscope數據庫,再查看ctags數據庫

:setcsto=0

為了方便,我們可以在.vimrc中自動增加當前路徑下的cscope數據庫

if has(“cscope”) set csprg=/usr/local/bin/cscope set csto=0 set cst set csverb if filereadable(“cscope.out”) cs add cscope.out elseif $CSCOPE_DB != “” cs add $CSCOPE_DB endif set csverbendif

配置好以後就可以使用cscope的強大的查找功能了,cscope查找命令

:cs find type name

Type包括

0或者s —— 查找name在這個工程中出現的位置

1或者g —— 查找name的定義

2或者d —— 查找name調用的函數

3或者c —— 查找調用name的函數

4或者t —— 查找name字符串

6或者e —— 查找egrep匹配模式

7或者f —— 查找文件

8或者i —— 查找#include 文件名為name的文件

我在平常使用的最多是查找定義和調用當前函數的函數,所以在.vimrc中配置成F3和F4快捷鍵,自動查找光標下符號。

nmap 《F3》 :cs find 3 《C-R》=expand(“《cword》”)《CR》《CR》

nmap 《F4》 :cs find 0 《C-R》=expand(“《cword》”)《CR》《CR》

3.taglist

source insight左邊是當前文件的所有符號窗口,包括include的頭文件,函數和變量。這個功能可以由taglist實現。Ubuntu下安裝非常方便,

vim-addons install taglist

vim-addons是vim的插件管理程序,如果沒有安裝的話可以執行以下命令安裝

sudo apt-get install vim-addon-manager

sudo apt-get install vim-scripts

vim-addons status可以看到當前插件的安裝狀態

vim-addons install 安裝插件

vim-addons remove 刪除插件

安裝好taglist後,可以自己打開和關閉taglist窗口,

:TlistToggle

可以設置成F8快捷鍵,不過等後面安裝了winmanager後也不需要手動控制了。

nnoremap 《silent》 《F8》 :TlistToggle《CR》 F8

幾個比較實用的選項需要打開:

let Tlist_Auto_Open=1 “打開文件時自動打開taglist

let Tlist_Exit_OnlyWindow=1 “關閉文件時自動關閉taglist

let Tlist_File_Fold_Auto_Close=1 “taglist window中折疊非當前文件

let Tlist_Process_File_Always=1 “taglist始終解析文件

需要查看更多選項請help

:help taglist.txt

Ctrl-w-w 跳到taglist窗口,Taglist窗口中也有快捷鍵,

《enter》 跳到光標下的tag定義的位置

u 更新taglist

zo 打開折疊

zc 關閉折疊

《tab》或]] 跳到下一個文件

《BS》或[[ 跳到上一個文件

4.NERDTree

Source insight右邊是文件列表窗口,顯示了工程的所有文件名。文件管理插件NERDTree具有類似的功能,該插件可以顯示當前目錄下所有文件和目錄,並方便地浏覽和操作文件。

Vim addon manager沒有NERDTree插件,需要自己下載NERDTree,下載後將plugin/NERD_tree.vim 和doc/NERD_tree.txt分別復制到.vim的相應目錄下

為了讓winmanager順利打開NERDTree窗口,在.vimrc中增加下面代碼,

let g:NERDTree_title=‘[NERD Tree]’function! NERDTree_Start() exec ‘NERDTree’endfunctionfunction! NERDTree_IsValid() return 1endfunction

5.winmanager

為了像source insight一樣同時顯示多個窗口,需要winmanager插件。

vim-addons install winmanager

同時在winmanager中顯示NERDTree和taglist窗口,默認在左邊,

let g:winManagerWindowLayout=‘NERDTree|TagList’

設置快捷鍵wm打開winmanager,

nmap wm :WMToggle《cr》 wm命令打開

設置窗口轉換快捷鍵,不過在用了MiniBufExplorer後有更方便的選擇,

map 《c-w》《c-b》 :BottomExplorerWindow《cr》 跳到下面窗口

map 《c-w》《c-f》 :FirstExplorerWindow《cr》 跳到上面窗口

最好打開vim時會自動打開winmanager窗口,

let g:AutoOpenWinManager = 1

同時修改winmanager.vim

“set auto open Winmanagerif g:AutoOpenWinManager autocmd VimEnter * nested call s:StartWindowsManager()|3wincmd w|q endif

其中3表示打開後光標在第3個窗口,即源文件窗口。1,2分別表示NERDTree和taglist窗口。

因為winmanager總會打開一個沒有用的空窗口,不知道為什麼,需要最後加q關閉它。如果是用WMToggle打開winmanager的話,要關閉這個空窗口就需要在winmanager.vim的ToggleWindowsManager函數中增加q。

function! 《SID》ToggleWindowsManager() if IsWinManagerVisible() call s:CloseWindowsManager() else call s:StartWindowsManager() ”close empty window

exe ‘q’ end

endfunction

更多請查看

:help winmanager

6.MiniBufExplorer

寫程序的時候肯定會多個源文件同時編輯,像source insight就有個window list,保存了最近打開過的所有源文件。Vim通過buffer來達到類似的作用,buffer的命令操作包括

:ls 顯示當前打開的所有文件

:bn 跳到下一個文件

:bp 跳到上一個文件

:bd 刪除一個buffer

MiniBufExplorer插件提供了更直觀的方式,將buffer顯示在最上端的窗口內,窗口操作包括

《Tab》 向前循環切換到每個buffer名上

《S-Tab》 向後循環切換到每個buffer名上

《Enter》 在打開光標所在的buffer

d 刪除光標所在的buffer

為了只在在源碼窗口打開選中的buffer,需要設置miniBufExplModSelTarget,默認是關閉的,

let g:miniBufExplModSelTarget = 1

不過MiniBufExplorer還有個更重要的功能是可以實現用CTRL鍵加h|j|k|l方便地切換窗口,

let g:miniBufExplMapWindowNavVim = 1 用《CTRL-h|j|k|l》切換到上下左右窗口

7.OmniCppComplete

大部分IDE都支持自動補全功能,vim作為linux下優秀的編輯器當然不缺少,不過vim自帶的補全功能,ctrl+n,ctrl+p可以再當前源文件中實現簡單的補全功能,但這是遠遠不夠的。OmniCppComplete利用了Ctags生成的tag數據庫,實現了文件間名字補全,包括

命名空間(namespace),類(class),結構(struct)和聯合(union)補全

函數屬性成員和返回值類型補全

“this”指針成員補全

C/C++類型轉換(cast)對象補全

類型定義(typedef)和匿名類型(anonymous types)補全

安裝好後輸入時鍵入ctrl+x ctrl+o就會補全當前名字,使用過IDE的同學都知道補全只要一個tab鍵就行了,按這麼多鍵太麻煩了。這就需要supertab插件的幫助了,

Vim-addons install supertab

安裝好後,設置以下選項,

let g:SuperTabRetainCompletionType=2

letg:SuperTabDefaultCompletionType=“《C-X》《C-O》”

SuperTabDefaultCompletionType設置tab鍵對應的命令,

SuperTabRetainCompletionType表示

0- 不記錄上次的補全方式

1- 記住上次的補全方式,直到用其他的補全命令改變它

2- 記住上次的補全方式,直到按ESC退出插入模式為止

8.surround

在在編程時會遇到大量的匹對符號,如“,(,{等等,高效地處理這些符號可以大大地提高編程效率,Surround正是處理這些符號的非常優秀等等插件。

Surround的使用非常簡單明了(*代表當前光標位置):

插入符號

Hellow*orld! ysiw) Hello (world)!

或者

Hellow*orld! veS) Hello (world)!

替換

“Hello*world!” cs“‘ ’Hello world!‘

刪除

”Hello*world!“ ds” Hello world!

總結

至此,在安裝了以上插件後,vim已經具備了強大的編輯功能。當然,這裡只是列出一些基本插件,還有很多其他有趣又好用的插件,比如注釋用的NERD_commenter.vim,高亮書簽的VisualMark,頭文件切換的a.vim等等,以後有機會再研究。

上面就是Ubuntu上安裝vim插件的方法介紹了,安裝插件後的vim將擁有更多的功能,以滿足程序編輯的需要,如果你還沒有安裝這些vim插件,不妨為自己的系統安裝下吧。

Copyright © Linux教程網 All Rights Reserved