1. 程式人生 > >vim中php自動補全

vim中php自動補全

1. omni complete

omni complete是一個很好用的自動補全工具,支援很多語言,能自動的進行一些補全.在編譯安裝了vim73後,就自帶了.我們要在vimrc下開啟

set nocp
filetype plugin on
set ofu=syntaxcomplete#Complete

第一句是關閉相容模式,第二句則是開啟匹配檔案型別.一定要加上

打開了之後,就能發現很多程式碼可以自動補全了.比如css,html等都能很好的工作,

使用方法是<ctrl+x><ctrl+o>

不過這還是不夠,對於c/c++程式設計師來說,我們還需要更強大的工具.類成員變數,類的方法也要補全出來!

所以omnicppcomplete就登場了

cp omnicppcomplete-0.41.zip ~/.vim
cd ~/.vim
unzip omnicppcomplete-0.41.zip

之後開啟vimrc,新增下列幾段

複製程式碼
" OmniCppComplete
set completeopt=menu,longest,menuone
let OmniCpp_NamespaceSearch = 2
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr 
= 1 let OmniCpp_MayCompleteDot = 1 let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] let OmniCpp_SelectFirstItem = 2 let OmniCpp_DisplayMode=1 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
複製程式碼

再次開啟vim,omnicpp就安裝上了.

不過,這類成員變數還是不出來啊.

原來omnicpp利用的是tag來判斷的,因此我們需要利用ctags來生成

首先要保證機器裡有ctags,而且最好要5.4以上.好像是之前的有bug.

進入所在的cpp的目錄,

執行

ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf your_file.cpp

這會生成一個tag檔案,開啟vim,執行

:set tags += tags

就會載入了.

使用的時候,在遇到->和.的時候就會自動彈出.

不過吧,這樣還是麻煩.每次還得自己執行一遍ctags,然後把tags載入進來,而且,那意味著我們的有些庫的標頭檔案也不能自動補全麼?

首先是自動載入tags,在vimrc中加入

set tags+=tags
set tags+=/home/summer/tags/lib_tags

對於我們平常用到的標頭檔案,可以自己手動生成一份,放到固定的資料夾下,之後寫程式碼就方便了.

比如我的lib_tags就是編譯了linux的標頭檔案生成的

ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf -R /usr/include/*

有了這個tag,還可以發揮vim的跳轉功能.記得--extra一定要+f,這樣遇到標頭檔案我們也能跳轉進標頭檔案了.

另外我加入了當前目錄下的tags,這樣當我們生成一個tag之後,vim就回自動載入了.

而對於自動生成tags.事實上,還有人寫了一個方便的工具,下面介紹

2. omnitags

這個是國人寫的vim外掛,下載地址

下載最新的版本放到~/.vim/plugin目錄下即可.

再修改vimrc

nmap <silent><leader>t :OmniTagsLoad ./tags<CR>
nmap <leader>u :OmniTagsUpdate

重啟vim,在需要自動生成tags的時候,首先載入

<leader>t
//如果提示沒有tag,則會要求建立,選擇y即可
<leader>u your_files
//即可把該檔案加入到本目錄的tag中,
//之後凡是用:w儲存,tag都會被更新

現在,配合起omnicppcomplete,寫程式碼就很方便了.

不過感覺提示還是不智慧,而且每次要補全了還得自己手動按ctrl+x ctrl+o.不爽不爽

3. autocomplpop

這個外掛就是解決我們的煩惱的

同樣的

cp vim-autocomplpop.zip ~/.vim
unzip vim-autocomplpop.zip

就好了.

這個外掛非常強大,自動彈出也滿足了我們很多功能.比如自動彈出檔案路徑等等.

這個外掛的預設是keyword completion.而由於咱們已經有了omnicppcomplete,所以其實就夠了.

其對於keyword的補全實力非常強大.不過可能有人覺得,還是全部都用omni comp比較好.

於是就在網上搜了這麼一段程式碼

let g:AutoComplPop_Behavior = { 
\ 'c': [ {'command' : "\<C-x>\<C-o>",
\ 'pattern' : ".",
\ 'repeat' : 0}
\ ] 
\}

事實上這個是沒有用的,要想使用的話,有兩個方式

1. 下載2.6或者更老版本的autocomplpop

從2.7開始,autocomplpop就修改了配置方式,所以之前老的版本已經無效了

2. 修改寫法

let g:acp_behavior = {
    'command' : "\<C-x>\<C-o>",
    'meets': mycppfunc
    'repeat':0    
}

在~/.vim/autoLoad/acp.vim中增加函式

照著裡頭acp#meetsForKeyword的函式寫就可以了..

function mycppfunc(context)
    return 1
endfunction

不過這個在專案大了之後非常非常慢,所以不大推薦.預設的方法就挺好.效率也很高

4. NERDTreeToggle

這個是一個顯示檔案樹形結構的外掛,挺方便,一般大家也用

老方法,cp後unzip在~/.vim下即可

在vimrc下加入下面語句

nmap <F2> :NERDTreeToggle<CR>

以後按F2就可以掉出來,很方便

5. taglist

taglist是利用ctags來讀取目前檔案下的函式列表,變數等,很方便,推薦使用

還是cp後unzip在~/.vim就可以使用了

在vimrc下加入

複製程式碼
let Tlist_Ctags_Cmd='~/bin/ctags' //這個修改成安裝ctags的目錄
let Tlist_Show_One_File=1
let Tlist_OnlyWindow=1
let Tlist_Use_Right_Window=0
let Tlist_Sort_Type='name'
let Tlist_Exit_OnlyWindow=1
let Tlist_Show_Menu=1
let Tlist_Max_Submenu_Items=10
let Tlist_Max_Tag_length=20
let Tlist_Use_SingleClick=0
let Tlist_Auto_Open=0
let Tlist_Close_On_Select=0
let Tlist_File_Fold_Auto_Close=1
let Tlist_GainFocus_On_ToggleOpen=1
let Tlist_Process_File_Always=1
let Tlist_WinHeight=10
let Tlist_WinWidth=45
let Tlist_Use_Horiz_Window=0
nmap <F3> :Tlist<CR>
複製程式碼

之後就可以使用F3調出來了

6. stl

vim對於c++的高亮提示的不好,尤其是stl很多方法和容器都沒有高亮,看著很是鬱悶,這時候stl就派上用場了

有了這個,vim就能對stl進行高亮了.

用法: 

$ mkdir -p ~/.vim/after/syntax/cpp 
$ cp stl.vim ~/.vim/after/syntax/cpp/

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

總結:

差不多把自己目前用的都介紹了.

vim用好了很強大,並不比很多IDE差.同時,由於環境限制,有的時候只能在終端下進行程式設計,VIM的重要性就體現出來了.用好了能很快提高開發效率.