Pages

2011年7月6日 星期三

Vim 基本設定及plugin

分割視窗
開一檔案後  vsp 另一檔案
----------------------------
跳換視窗
ctrl+w

切換視窗(taglist)
alt+ 號碼


*************************************************************************************
.vimrc 設定:


***********************************************************
.vimrc基本設定
***********************************************************
set nu "設定行數
set hls "hls是hlsearch,是highlight search,設定將搜尋的字串反白
set smartindent "設定自動縮排
set nocompatible "設定vim不要使用與vi相容的模式
set showmatch "自動找對應括號
set nobackup "不要備份
syntax on "用顏色標記格式
highlight Comment ctermfg=blue "設定顏色標記
set encoding=utf-8 "設定utf8檔案格式

let g:acp_completeOption = '.,w,b,u,t,i,k'  "for autocomplpop
let Tlist_Inc_Winwidth=0 "禁止自動改變當前Vim視窗的大小
let Tlist_Use_left_Window=1 "把方法清單放在螢幕的左側
let Tlist_File_Fold_Auto_Close=1 "讓當前不被編輯的檔的方法列表自動折疊起來,這樣可以節約一些螢幕空間


***********************************************************
srcexpl (Source Explorer)
***********************************************************
nmap <F10> :SrcExplToggle<cr>


***********************************************************
cscope + ctags (可以寫成shell file或單獨執行都可以)
***********************************************************
#!/bin/sh
find ./ -name '*.c' -o -name '*.h' > cscope.files
cscope -Rbkq -i cscope.files
ctags -R --exclude=.svn

-R: 在生成索引檔時,搜索子目錄樹中的代碼
-b: 只生成索引檔,不進入cscope的介面
-q: 生成cscope.in.out和cscope.po.out檔,加快cscope的索引速度
-k: 在生成索引檔時,不搜索/usr/include目錄
-i: 如果保存檔列表的檔案名不是cscope.files時,需要加此選項告訴cscope到哪兒去找原始檔案列表。可以使用“-”,表示由標準輸入獲得檔列表。


***********************************************************
cscope + ctags 注意事項
***********************************************************
"為了更好的使用cscope請添加如下內容,這樣Ctrl-]的跳轉將由cscope的tags進行分析
"在cscope_maps.vim有下面內容,使用cscope會出現錯誤,變成只能使用ctags(及上述shell把cscope有關的那兩行code拿掉),如果把下面內容mark掉,則cscope和ctags都可使用
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=0
  set cst
  set nocsverb
    "add any database in current directory
    if filereadable("cscope.out")
      cs add cscope.out
    "else add database pointed to by environment
    elseif $CSCOPE_DB != ""
      cs add $CSCOPE_DB
    endif
  set csverb
  set cscopetag
  set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-
endif


***********************************************************
cscope + ctags 使用方式
***********************************************************
1. 至Cscope官網下載cscope_maps.vim,並將之複製到~/.vim/plugin/。

2. 至/usr/src/linux-source-版本編號,執行ctags與cscope兩個檔案。

    * adrian@adrian-desktop:~# cd /usr/src/linux-source-2.6.20

    * adrian@adrian-desktop:/usr/src/linux-source-2.6.20# ctags -R && cscope -R (ctags產生tags檔,cscope產生cscope.out) --> 如欲離開cscope,按Ctrl+D即可。


3. 隨便編輯一個.c檔,如init/main.c

    * adrian@adrian-desktop:/usr/src/linux-source-2.6.20# vim init/main.c

    * 假設在init/main.c想要觀看 get_option這個識別子定義的地方,將游標移到該識別子上,再按Ctrl+]。如欲知道哪些地方呼叫該識別子,將游標移到該識別子上,按 Ctrl+\,再按c即可。Ctrl+\,再按s則搜尋該識別子出現的地方。


***********************************************************
LookupFile setting (預設是按F5)
***********************************************************
let g:LookupFile_MinPatLength = 2 "最少輸入2個字元才開始查找
let g:LookupFile_PreserveLastPattern = 0 "不保存上次查找的字串
let g:LookupFile_PreservePatternHistory = 1 "保存查找歷史
let g:LookupFile_AlwaysAcceptFirst = 1 "回車打開第一個匹配項目
let g:LookupFile_AllowNewFiles = 0 "不允許創建不存在的檔
let g:LookupFile_SortMethod = "" "關閉對搜索結果的字母排序
if filereadable("./filenametags")
  let g:LookupFile_TagExpr = '"./filenametags"'
endif
nmap <silent> <leader> LookupFile<cr>


***********************************************************
Taglists setting
***********************************************************
"設置taglists快速鍵
nnoremap <silent> <F11> :TlistToggle<cr>
"按一下或按兩下一個tag時會跳到該tag定義的位置; 0(默認)=按兩下,1=按一下
let Tlist_Use_SingleClick=1


***********************************************************
Winmanager setting (Source Insight化1)
***********************************************************
let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"
let g:winManagerWidth = 30
let g:defaultExplorer = 0
nmap <C-W><C-F> :FirstExplorerWindow<cr>
nmap <C-W><C-B> :BottomExplorerWindow<cr>
nmap <silent> <F12> :WMToggle<cr>


***********************************************************
Trinity setting(不能與winManager共存,兩種設定只能存在一種)
(Source Insight化2)
***********************************************************
"Triniry + Source Explorer + TagList + NERD Tree設定
" Open and close all the three plugins on the same time
nmap <F8>   :TrinityToggleAll<CR>

" Open and close the srcexpl.vim separately
nmap <F9>   :TrinityToggleSourceExplorer<CR>

" Open and close the taglist.vim separately
nmap <F10>  :TrinityToggleTagList<CR>

" Open and close the NERD_tree.vim separately
nmap <F11>  :TrinityToggleNERDTree<CR>


***********************************************************
menu setting(針對WinVIM版本,遇到menu亂碼的設定)
***********************************************************
source $VIMRUNTIME/delmenu.vim "for win vim
source $VIMRUNTIME/menu.vim "for win vim
language english "設定訊息為英文 for win vim






***************************************************
各元件安裝流程:
***************************************************

cflow ctags autocomplpop tabbar winmanager lookupfile genutils cscope cppcomplete global trinity srcexpl(Source Explorer) taglist

1.cflow
說明:能夠幫助確認程式的大架構,以及分析程式碼相互的關聯性。

cflow-xx.tar.gz
tar -zxvf cflow-xx.tar.gz
cd cflow-xx
./configure
make
make install
or
apt-get cflow (直接安裝即可,若是Server,也可省略此元件)
使用方式:
cflow xxx.c


2.ctags
說明:Ctags用來產生原始碼每一tag(函數名或識別子)所在位置,執行Ctags會產生名為tags的檔案,Vim參考此檔便可知道每一tag的資訊。因此,只要將游標移至函數名或識別子上,按Ctrl+]就可以跳至函數或識別子定義的地方。如欲返回,則按Ctrl+t即可。

ctags-xx.tar.gz
tar -zxvf ctags-xx.tar.gz
cd ctags-xx
./configure
make
make install
or
apt-get install exuberant-ctags
使用方式:
ctags -R ./
建立tags
遊標移到識別字或函數名上,按 Ctrl+] ,要回到原處就按 Ctrl+T
Ctrl+t
Ctrl+]
svn問題:
使用svn checkout出來的程式碼,會有一份相同的在目錄.svn下,這時如果用-R參數製作tags檔,
會包含 多份一樣的標記,可以用--exclude將它排除掉:
ctags -R --exclude=.svn

.vimrc
set tags=tags;
set autochdir

在使用vim的時候,使用:Tlist命令切換函數列表的開、關。
按住ctrl鍵然後按兩下w鍵在正常編輯區域和tags區域中切換。


3.autocomplpop (acp)
說明:此plugin為一可自動偵測目前程式碼的語境,自動popupmenu顯示相關對應的補齊函式 (Completion Function)。

解壓縮在 ~/.vim:
unzip -d ~/.vim vim-autocomplpop.zip
將autoload doc plugin這三樣copy到/usr/share/vim/vim72/底下相對應的目錄即可.
如果是Server,則在自己的home目錄底下自建.vim目錄,將autoload doc plugin這三樣copy到.vim目錄底下即可
如果是Server,則在自己的home目錄底下自建.vimrc,則可以自行設定編輯模式
這樣就算是安裝好了,開 vim 也會自動執行。
不過因為預設的搜尋範圍不包括 include 近來的檔案,要讓 acp 也搜尋include 的檔案的話只要在 ~/.vimrc 加入下面的設定:(vim 預設 .,w,b,u,t,i ; acp 預設 .,w,b,k)
在.vimrc新增 ---> let g:acp_completeOption = '.,w,b,u,t,i,k'


4.taglist
說明:是一個可以幫助瀏覽程式碼的工具,能列出程式碼內的結構、define、函式列表及巨集等,能有效率的瀏覽程式碼,並能讓使用者快速跳到這些變數的定義處。

解壓縮,將doc plugin兩個目錄copy到/usr/share/vim/vim72/底下相對應的目錄即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將doc plugin兩個目錄copy到.vim目錄底下即可


5.tabbar
說明:可在vim執行開多個檔案的瀏覽工具。

將tabbar.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可
使用方式:
Alt + 1(2,3.....)切換


6.winmanager
說明:使vim看起來更像一個典型的windows的IDE。winmanager把file explorer和buffer explorer以及taglists外掛程式結合起來,使vim變得更加方便,強大。

解壓縮,將doc plugin兩個目錄copy到/usr/share/vim/vim72/底下相對應的目錄即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將doc plugin兩個目錄copy到.vim目錄底下即可


7.lookupfile
說明:透過輸入關鍵字,就可以找到檔案的外掛程式。

將autoload doc plugin這三樣copy到/usr/share/vim/vim72/底下相對應的目錄即可.
如果是Server,則在自己的home目錄底下自建.vim目錄,將autoload doc plugin這三樣copy到.vim目錄底下即可
Lookupfile外掛程式
它使用VIM 7.0提供的插入模式下的下拉菜單補全功能,因此只能在VIM 7.0及以上版本中使用
下載:http://www.vim.org/scripts/script.php?script_id=1581
大於lookupfile-1.4.zip這個版本需要vim-7.1以上
Lookupfile外掛程式還需要最新的ctags,genutils支援
使用方式:
:help lookupfile (查看如何使用)
預設快速鍵為F5
啟動vim的時候如果出現下面的錯誤:
Error detected while processing /Users/mml/.vim/plugin/lookupfile.vim:
line 105:
E227: mapping already exists for <80>k5
那麼參照下面進行修改:
Modified: trunk/.vim/plugin/lookupfile.vim

--- trunk/.vim/plugin/lookupfile.vim 2007-08-28 13:21:25 UTC (rev 423)
+++ trunk/.vim/plugin/lookupfile.vim 2007-08-28 13:35:28 UTC (rev 424)
@@ -102,10 +102,10 @@
   noremap <script> <silent> <Plug>LookupFile :LookupFile<CR>

   if !hasmapto('<Plug>LookupFile', 'n')
- nmap <unique> <silent> <F5> <Plug>LookupFile
+ silent! nmap <unique> <silent> <F5> <Plug>LookupFile
   endif
   if !hasmapto('<Plug>LookupFile', 'i')
- imap <unique> <expr> <silent> <F5> (pumvisible()?"\<CE>":"")."\<Esc>\<Plug>LookupFile"
+ silent! imap <unique> <expr> <silent> <F5> (pumvisible()?"\<CE>":"")."\<Esc>\<Plug>LookupFile"
   endif
 endif


8.genutils
說明:採用了新的自動載入機制。搭配lookupfile使用。

將autoload plugin兩個目錄copy到/usr/share/vim/vim72/底下相對應的目錄即可.
如果是Server,則在自己的home目錄底下自建.vim目錄,將autoload plugin兩個目錄copy到.vim目錄底下即可


9.srcexpl(Source Explorer)
說明:預覽視窗。

將srcexpl.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可
使用方式:
:SrcExplToggle

10.cscope
說明:使用Cscope可搜尋tag、搜尋哪些地方呼叫某一函數、搜尋某一檔案與利用正規表達式搜尋相關字串等等功能 (在Vim底下按":cs"會秀出Usage Tip)。

將cscope_maps.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可
使用方式:
請看本文件一開始的說明。

11.cppcomplete
說明:需要ctags的支撐,可以補全類型或者函數名。但我不清楚和autocomplpop的差別,網路上沒有說明,有興趣的人可以去了解一下。至少,我覺得autocomplpop比較好用,因為它會自動產生popup menu。

將cppcomplete.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可


12.gtags(global)
說明:gtags 全名為 gnu global source code tag system,可用來讀大型專案的源碼。運作原理與 ctags相似。提供比較完整的解析和類型索引,和cscope比,稍微差些的就是對類型引用的列印清單中沒有標識這個引用在什麼函數中進行。其實global可能不是為vim所生,它的主要目的是用html的方式進行表達相關的關聯關係和索引,使用起來感覺沒有cscope的那麼貼切。

將gtags.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可
使用方式:
$ gtags
輸入 $ ls G* 發現產生四個 tag 檔案。這四個 database 由 global 指令自行呼叫,使用者無須刻意指定:
GPATH GRTAGS GSYMS GTAGS
分別表示如下
GPATH: path name database
GRTAGS: reference database
GSYMS: symbol database
GTAGS: definition database


13.trinity
說明:整合了三個plugin:Source explorer,taglist和NERD tree,在Vim模擬出接近Source Insight的效果。

將NERD_tree.vim和trinity.vim copy到/usr/share/vim/vim72/plugin底下即可
如果是Server,則在自己的home目錄底下自建.vim目錄,將之copy到.vim目錄底下plugin即可

沒有留言:

張貼留言