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的重要性就體現出來了.用好了能很快提高開發效率.