z 1. vim閱讀代碼
添加cscope符號索引數據庫後,能夠調用"cscope find"命令進行查找,vim支持8種cscope的查詢功能。如在代碼中查找調用work()函數的函數,能夠在vim命令狀態下輸入":cs find c work",回車便可。還能夠進行字符串查找,它會對雙引號或單引號括起來的內容查找。還能夠輸入一個正則表達式,這相似於egrep程序的功能。
:cs help (vim command下查詢)
s: 查找C語言符號,即查找函數名、宏、枚舉值等出現的地方
g: 查找函數、宏、枚舉等定義的位置,相似ctags所提供的功能
d: 查找本函數調用的函數:
c: 查找調用本函數的函數
t: 查找指定的字符串
e: 查找egrep模式,至關於egrep功能,但查找速度快多了
f: 查找並打開文件,相似vim的find功能
php
i: 查找包含本文件的文件 html
4. 使用cscope[2]
當前目錄有main.c,其中調用了cstest.c中的print(),此函數在cstest.h中進行了聲明。
使用下面的命令生成代碼的符號索引文件:
$ cscope -Rbkq
這個命令會生成三個文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符號索引,後兩個文件是使用"-q"選項生成的,能夠加快cscope的索引速度。上面命令的參數含義以下:
-R: 在生成索引文件時,搜索子目錄樹中的代碼
-b: 只生成索引文件,不進入cscope的界面
-k: 在生成索引文件時,不搜索/usr/include目錄
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-i: 若是保存文件列表的文件名不是cscope.files時,須要加此選項告訴cscope到哪兒去找源文件列表。可使用"-",表示由標準輸入得到文件列表。
-I dir: 在-I選項指出的目錄中查找頭文件
-u: 掃描全部文件,從新生成交叉索引文件
-C: 在搜索時忽略大小寫
-P path: 在以相對路徑表示的文件前加上的path,這樣,你不用切換到你數據庫文件所在的目錄也可使用它了。
在缺省狀況下,cscope在生成數據庫後就會進入它本身的查詢界面,通常不用這個界面,因此使用了"-b"選項。若是已經進入了這個界面,按CTRL-D退出。
接下來能夠在vim裏瀏覽代碼了
$ vim main.c
在vim裏命令狀態下添加符號索引庫
: cscope add cscope.out
而後能夠查看相應的函數定義或文件,ctrl+t返回。
: cscope find g print
: cscope find f cstest.hpython
很是有用的連接
c++
http://blog.csdn.net/wklken/article/details/9076621git
https://github.com/wklken/k-vim程序員
Austen ~/.vim/plugin$ls
a.vim mswin.vim tasklist.vim wintagexplorer.vim
cctree.vim srcexpl.vim winfileexplorer.vim
cscope_maps.vim taglist.vim winmanager.vimgithub
" F1 - F6 設置
" F1 廢棄這個鍵,防止調出系統幫助
" F2 行號開關,用於鼠標複製代碼用
" F3 顯示可打印字符開關
" F4 換行開關
" F5 粘貼模式paste_mode開關,用於有格式的代碼粘貼
" F6 語法開關,關閉語法能夠加快大文件的展現
" F7 生成ctags文件
" F8 打開代碼預覽窗口
" F9 未定
" F10 未定正則表達式
" I can type :help on my own, thanks. Protect your fat fingers from the evils of <F1>
noremap <F1> <Esc>"
""爲方便複製,用<F2>開啓/關閉行號顯示:
function! HideNumber()
if(&relativenumber == &number)
set relativenumber! number!
elseif(&number)
set number!
else
set relativenumber!
endif
set number?
endfunc
nnoremap <F2> :call HideNumber()<CR>
nnoremap <F3> :set list! list?<CR>
nnoremap <F4> :set wrap! wrap?<CR>
"set paste
set pastetoggle=<F5> " when in insert mode, press <F5> to go to
" paste mode, where you can paste mass data
" that won't be autoindented
" disbale paste mode when leaving insert mode
au InsertLeave * set nopaste
nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR>數據庫
#注意# 所生成的cscope.out和tags文件要在打開VIM所在的文件夾,不然VIM沒法找到相關符號信息。 ubuntu
支持ctrl-c ctrl-v,用mswin.vim
.vimrc中 添加
source ~/.vim/plugin/mswin.vim
behave mswin
" 解決亂碼
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
syntax on " 自動語法高亮
colorscheme molokai " 設定配色方案
set expandtab
set number " 顯示行號
set cursorline " 突出顯示當前行
set ruler " 打開狀態欄標尺
set shiftwidth=4 " 設定 << 和 >> 命令移動時的寬度爲 4
set softtabstop=4 " 使得按退格鍵時能夠一次刪掉 4 個空格
set tabstop=4 " 設定 tab 長度爲 4
set nobackup " 覆蓋文件時不備份
" set autochdir " 自動切換當前目錄爲當前文件所在的目錄
filetype plugin indent on " 開啓插件
set backupcopy=yes " 設置備份時的行爲爲覆蓋
set ignorecase smartcase " 搜索時忽略大小寫,但在有一個或以上大寫字母時仍保持對大小寫敏感
set nowrapscan " 禁止在搜索到文件兩端時從新搜索
set incsearch " 輸入搜索內容時就顯示搜索結果
set hlsearch " 搜索時高亮顯示被找到的文本
set noerrorbells " 關閉錯誤信息響鈴
set novisualbell " 關閉使用可視響鈴代替呼叫
set t_vb= " 置空錯誤鈴聲的終端代碼
set showmatch " 插入括號時,短暫地跳轉到匹配的對應括號
set matchtime=2 " 短暫跳轉到匹配括號的時間
set magic " 設置魔術
set hidden " 容許在有未保存的修改時切換緩衝區,此時的修改由 vim 負責保存
set guioptions-=T " 隱藏工具欄
set guioptions-=m " 隱藏菜單欄
set smartindent " 開啓新行時使用智能自動縮進
set backspace=indent,eol,start
" 不設定在插入狀態沒法用退格鍵和 Delete 鍵刪除回車符
set cmdheight=1 " 設定命令行的行數爲 1
set laststatus=2 " 顯示狀態欄 (默認值爲 1, 沒法顯示狀態欄)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ " 設置在狀態行顯示的信息
" 摺疊代碼: 快捷按鍵 zc
" 遞歸摺疊代碼: 快捷按鍵 zC
" 取消代碼摺疊: 快捷按鍵 zo
" 遞歸取消折疊代碼: 快捷按鍵 zO
" 摺疊文件中的全部代碼: 快捷按鍵 zM
" 取消文件中全部代碼的摺疊: 快捷按鍵 zR
" 對第m行到第n行進行摺疊: 打開摺疊,使用命令: :m,nfoldopen, 關閉摺疊,使用命令: :m,nfoldclose
" 在摺疊代碼中的上下移動: 在打開的摺疊中:[z ]z 在關閉的摺疊中:zj zk (一試便知)
set foldenable " 開始摺疊
set foldmethod=syntax " 設置語法摺疊
set foldcolumn=0 " 設置摺疊區域的寬度
setlocal foldlevel=1 " 設置摺疊層數爲
" set foldclose=all " 設置爲自動關閉摺疊
set foldlevelstart=99 nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 用空格鍵來開關摺疊
" 跳轉到函數、全局結構、全局變量等tag: 組合鍵 ctrl_]
" 從tag處返回跳轉的位置:組合鍵 ctrl_t
" 跳轉到全局變量處: 快捷鍵 gD
" 跳轉到局部變量處: 快捷鍵 gd
" 返回到上一個操做位置(上一次光標位置): 組合鍵 ctrl_o
" 返回到下一個操做位置(更新的光標位置): 組合鍵 ctrl_i
set mouse=a
set confirm
set history=1000
set ruler
set showcmd
"窗口新建
map <leader>vn :vnew
map <leader>vs :vsplit<cr>
map <leader>ne :new
map <leader>st :split<cr>
map <leader>ed :edit
" Fast grep
nmap <silent> <leader>lv :lv /<c-r>=expand("<cword>")<cr>/ %<cr>:lw<cr>
vmap <silent> <leader>lv :lv /<c-r>=<sid>GetVisualSelection()<cr>/ %<cr>:lw<cr>
" Buffers操做快捷方式!
" nnoremap <C-RETURN> :bnext<CR>
" nnoremap <C-S-RETURN> :bprevious<CR>
"
" " Tab操做快捷方式!
nnoremap <C-TAB> :tabnext<CR>
nnoremap <C-S-TAB> :tabprev<CR>
"
" "關於tab的快捷鍵
map tn :tabnext<cr>
map tp :tabprevious<cr>
map td :tabnew .<cr>
map te :tabedit
map tc :tabclose<cr>
"
" "窗口分割時,進行切換的按鍵熱鍵須要鏈接兩次,好比從下方窗口移動
" "光標到上方窗口,須要<c-w><c-w>k,很是麻煩,如今重映射爲<c-k>,切換的
" "時候會變得很是方便.
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" ctag
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
" update cscope database
" use absolute path in cscope tag file
nmap <F5> :!find `pwd` -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files<CR>
\ :!cscope -b -i cscope.files -f cscope.out<CR>
\ :!export CSCOPE_DB=`pwd`/cscope.out<CR>
\ :cs add cscope.out<CR>
\ :cs reset<CR>
Bundle 'wesleyche/SrcExpl' "相似sourceInsight的代碼預覽窗口
" // The switch of the Source Explorer
nmap <F8> :SrcExplToggle<CR>
" // Set the height of Source Explorer window
let g:SrcExpl_winHeight = 8
" // Set 100 ms for refreshing the Source Explorer
let g:SrcExpl_refreshTime = 100
" // Set "Enter" key to jump into the exact definition context
" let g:SrcExpl_jumpKey = "<ENTER>"
" // Set "Space" key for back from the definition context
let g:SrcExpl_gobackKey = "<SPACE>"
" // In order to Avoid conflicts, the Source Explorer should know what plugins
" // are using buffers. And you need add their bufname into the list below
" // according to the command ":buffers!"
let g:SrcExpl_pluginList = [
\ "__Tag_List__",
\ "_NERD_tree_",
\ "Source_Explorer"
\ ]
" // Enable/Disable the local definition searching, and note that this is not
" // guaranteed to work, the Source Explorer doesn't check the syntax for now.
" // It only searches for a match with the keyword according to command 'gd'
let g:SrcExpl_searchLocalDef = 1
" // Do not let the Source Explorer update the tags file when opening
let g:SrcExpl_isUpdateTags = 0
" // Use 'Exuberant Ctags' with '--sort=foldcase -R .' or '-L cscope.files' to
" // create/update a tags file
let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ."
" // Set "<F12>" key for updating the tags file artificially
let g:SrcExpl_updateTagsKey = "<F12>"
" taglist
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
" cscope
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
if has("cscope")
set csprg=/usr/bin/cscope "指定用來執行 cscope 的命令
set csto=1 "先搜索tags標籤文件,再搜索cscope數據庫
set cst "使用|:cstag|(:cs find g),而不是缺省的:tag
endif
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
map <C-_> : cstag <C-R>=expand(「<cword>」)<CR><CR>
map g<C-]> :cs find 3 <C-R>=expand(「<cword>」)<CR><CR>
map g<C-/> :cs find 0 <C-R>=expand(「<cword>」)<CR><CR>
nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-Space>i :scs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>s /:vert scs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>g /:vert scs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>c /:vert scs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>t /:vert scs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>e /:vert scs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-Space><C-Space>i /:vert scs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-Space><C-Space>d /:vert scs find d <C-R>=expand("<cword>")<CR><CR>
set cscopequickfix=s-,c-,d-,i-,t-,e-
"Quickfix
"Cheney modifyed V0.1
nmap <leader>fn :cn<cr>
nmap <leader>fp :cp<cr>
nmap <leader>fw :cw 10<cr>
"nmap <leader>cc :botright lw 10<cr>
"map <c-u> <c-l><c-j>:q<cr>:botright cw 10<cr>
if has("cscope")
" add any database in current directory
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
elseif filereadable("../cscope.out")
cs add ../cscope.out
elseif filereadable("../../cscope.out")
cs add ../../cscope.out
elseif filereadable("../../../cscope.out")
cs add ../../../cscope.out
endif
set csverb
set csto=0
endif
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" OmniCppComplete
set nocp
" SuperTab
" let g:SuperTabDefaultCompletionType="context"
"-----------------------------------------------------------------
" plugin - NERD_tree.vim 以樹狀方式瀏覽系統中的文件和目錄
" :ERDtree 打開NERD_tree :NERDtreeClose 關閉NERD_tree
" o 打開關閉文件或者目錄 t 在標籤頁中打開
" T 在後臺標籤頁中打開 ! 執行此文件
" p 到上層目錄 P 到根目錄
" K 到第一個節點 J 到最後一個節點
" u 打開上層目錄 m 顯示文件系統菜單(添加、刪除、移動操做)
" r 遞歸刷新當前目錄 R 遞歸刷新當前根目錄
"-----------------------------------------------------------------
let g:NERDTree_title="[NERDTree]"
let g:winManagerWindowLayout="NERDTree|TagList"
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
" F3 NERDTree 切換
map <F3> :NERDTreeToggle<CR>
imap <F3> <ESC>:NERDTreeToggle<CR>
"-----------------------------------------------------------------
" plugin - NERD_commenter.vim 註釋代碼用的,
" [count],cc 光標如下count行逐行添加註釋(7,cc)
" [count],cu 光標如下count行逐行取消註釋(7,cu)
" [count],cm 光標如下count行嘗試添加塊註釋(7,cm)
" ,cA 在行尾插入 /* */,而且進入插入模式。 這個命令方便寫註釋。
" 注:count參數可選,無則默認爲選中行或當前行
"-----------------------------------------------------------------
let NERDSpaceDelims=1 " 讓註釋符與語句之間留一個空格
let NERDCompactSexyComs=1 " 多行註釋時樣子更好看
" Winmanager
nmap wm :WMToggle<CR>
" miniBufExplorer
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMoreThanOne=0
"-----------------------------------------------------------------
"" plugin - NeoComplCache.vim 自動補全插件
"-----------------------------------------------------------------
let g:AutoComplPop_NotEnableAtStartup = 1
let g:NeoComplCache_EnableAtStartup = 1
let g:NeoComplCache_SmartCase = 1
let g:NeoComplCache_TagsAutoUpdate = 1
let g:NeoComplCache_EnableInfo = 1
let g:NeoComplCache_EnableCamelCaseCompletion = 1
let g:NeoComplCache_MinSyntaxLength = 3
let g:NeoComplCache_EnableSkipCompletion = 1
let g:NeoComplCache_SkipInputTime = '0.5'
let g:NeoComplCache_SnippetsDir = $VIMFILES.'/snippets'
"" <TAB> completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" snippets expand key
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
"-----------------------------------------------------------------
"" plugin – a.vim
"-----------------------------------------------------------------:
1,安裝使用Ctags
Ctags工具是用來遍歷源代碼文件生成tags文件,這些tags文件能被編輯器或其它工具用來快速查找定位源代碼中的符號(tag/symbol), 如變量名,函數名等。好比,tags文件就是Taglist和OmniCppComplete工做的基礎。
這裏介紹從源代碼包安裝,安裝步驟跟大多數軟件的從源代碼安裝步驟同樣。
1)從http://ctags.sourceforge.net/下載源代碼包後,解壓縮生成源代碼目錄,
2)而後進入源代碼根目錄執行./configure,
3)而後執行make,
4)編譯成功後執行make install。
5)在~/.vimrc中增長如下這行:
[plain] view plain copy
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
到此,Ctags已安裝成功。
使用Ctags的也很簡單。 進入咱們的項目代碼根目錄,執行如下命令:
[plain] view plain copy
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
另外,因爲在前面第5條,咱們已經在Vim中配置了Ctrl-F12組合快捷鍵,因此咱們也能夠進入代碼根目錄後,打開Vim,按下Ctrl-F12快捷鍵自動生成tags文件。
命令執行完後,會在源代碼目錄生成tags文件。Vim默認會自動讀取當前目錄下的tags文件,因此不須要修改~/.vimrc文件。此時,咱們已經具備定義跳轉的功能了。有兩組快捷鍵是最經常使用的。
Ctrl-] 跳轉到光標所在符號的定義。
Ctrl-t 回到上次跳轉前的位置。
更多功能經過命令man ctags或在Vim命令行下運行help ctags查詢。
2,安裝使用Taglist
Taglist是vim的一個插件,提供源代碼符號的結構化視圖。
1)從http://www.vim.org/scripts/script.php?script_id=273下載安裝包,也能夠從http://vim-taglist.sourceforge.net/index.html下載。
2)進入~/.vim目錄,將Taglist安裝包解壓,解壓後會在~/.vim目錄中生成幾個新子目錄,如plugin和doc(安裝其它插件時,可能還會新建autoload等其它目錄)。
3)進入~/.vim/doc目錄,在Vim下運行"helptags ."命令。此步驟是將doc下的幫助文檔加入到Vim的幫助主題中,這樣咱們就能夠經過在Vim中運行「help taglist.txt」查看taglist幫助。
4)打開配置文件~/.vimrc,加入如下兩行:
[plain] view plain copy
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
到此安裝已經完成。
在Vim命令行下運行TlistToggle命令就能夠打開Taglist窗口,再次運行TlistToggle則關閉。示圖以下:
咱們能夠經過Ctrl-w快捷鍵或鼠標點擊在Taglist窗口和編輯區之間切換焦點,在Taglist窗口用鼠標或鍵盤選擇某個符號,而後點擊或回車,就能夠跳轉到該符號定義的位置。
更多功能可經過在Vim命令行下運行help taglist.txt查詢。
sudo apt-get install global
3,安裝使用Cscope
Cscope提供交互式查詢語言符號功能,如查詢哪些地方使用某個變量或調用某個函數。
Cscope已是Vim的標準特性,默認都有支持,官方網址爲http://cscope.sourceforge.net/。
1)在Vim下運行version查看Vim支持哪些特性,前面有前綴符號+的爲支持。若是支持Cscope,則直接進入2),不然下載Cscope源代碼包編譯安裝。步驟同Ctags安裝。
2)肯定Vim已支持Cscope後,將文件http://cscope.sourceforge.net/cscope_maps.vim下載到~/.vim/plugin目錄。
到這裏,咱們就能夠開始使用Cscope了。
1)使用Cscope須要生成cscope數據庫文件。進入項目代碼根目錄運行命令:
[plain] view plain copy
cscope -Rbq -f path/xxx.out
命令運行後會生成xxx.out文件,即cscope數據庫文件。更多用法參考man cscope文檔。
2)進入項目代碼根目錄,在Vim下運行命令:
[plain] view plain copy
cs add path/xxx.out
此命令將cscope數據庫載入Vim。
3)Cscope經常使用快捷鍵
Ctrl-\ s 查找全部當前光標所在符號出現過位置。
Ctrl-\ c 查找全部調用當前光標所在函數的函數。
按下快捷鍵查找結束後會在編輯區下方出現查找結果的列表,輸入結果編號並回車,就能跳轉到該查找結果在源代碼中的相應位置。例如,咱們將光標移到 initial_pool_size變量定義的位置,即17行,而後按下"Ctrl-\ s"組合快捷鍵,獲得示圖以下:
而後咱們輸入2,並回車,就能跳轉到第2個查找結果。
爲了界面更好看,能夠把Cscope的查找結果輸出到quickfix窗口,須要在~/.vimrc中加入下面這行:
[plain] view plain copy
set cscopequickfix=s-,c-,d-,i-,t-,e-
這樣,經過快捷鍵查找某個符號後,會當即跳轉到第一個找到的該符號出現的位置。若是你對此次默認跳轉的位置不滿意,在Vim命令行下運行cw命令,就能在 編輯區下面quickfix窗口看到全部查找結果的列表,點擊相應列表項就能跳轉到相應位置。這個功能已經跟VS很接近了吧:)
更多功能可經過命令man cscope或在Vim命令行下運行help cscope查詢。
4,安裝使用OmniCppComplete
OmniCppComplete主要提供輸入時實時提供類或結構體的屬性或方法的提示和補全。跟Talist同樣,OmniCppComplete也是一個Vim插件,一樣依賴與Ctags工具生成的tags文件。安裝步驟跟Taglist相似。
從http://www.vim.org/scripts/script.php?script_id=1520下載安裝包後。
1)進入~/.vim目錄,將安裝版解壓縮
2)進入~/.vim/doc目錄,在Vim命令行下運行"helptags .」
3)在~/.vimrc中加入如下幾行:
[plain] view plain copy
set nocp
filetype plugin on
OmniCppComplete的使用幾乎跟VS下的VA同樣。以下圖所示,輸入m0.以後當即彈出my_class類中全部的函數列表,而後用上下鍵選擇合適的函數。
更多功能經過在Vim命令行下運行"help omnicppcomplete"查詢。
5,安裝使用SuperTab
SuperTab使Tab快捷鍵具備更快捷的上下文提示功能。跟OmniCppComplete同樣,SuperTab也是一個Vim插件。
從http://www.vim.org/scripts/script.php?script_id=1643下載安裝版。這個安裝包跟先前的幾個Vim插件不一樣,它是一個vba文件,即Vimball格式的安裝包,這種格式安裝包提供傻瓜式的安裝插件的方法。
1)用Vim打開.vba安裝包文件。
2)在Vim命令行下運行命令「UseVimball ~/.vim」。此命令將安裝包解壓縮到~/.vim目錄。VImball安裝方式的便利之處在於你能夠在任何目錄打開.vba包安裝,而不用切換到安裝 目的地目錄。並且不用運行helptags命令安裝幫助文檔。
3)在~/.vimrc文件中加入如下這行:
[plain] view plain copy
let g:SuperTabDefaultCompletionType="context"
SuperTab使用很簡單,只要在輸入變量名或路徑名等符號中途按Tab鍵,就能獲得之前輸入過的符號列表,並經過Tab鍵循環選擇。
6,安裝使用Winmanager,NERDTree和MiniBufExplorer
前面介紹的幾個工具和插件,主要提供快捷的編輯功能,如定義跳轉,符號查詢,符號提示與補全等。這裏的三個插件,主要優化佈置VIm的界面。具體來 說,NERDTree提供樹形瀏覽文件系統的界面,MiniBufExplorer提供多文件同時編輯功能,而Winmanager將這NERDTree 界面和Taglist界面整合起來,使Vim更像VS!
分別從http://www.vim.org/scripts/script.php?script_id=1658
http://www.vim.org/scripts/script.php?script_id=159
http://www.vim.org/scripts/script.php?script_id=95
下載NERDTree,MiniBufExplorer和Winmanager安裝包(Winmanager還有個更新的vba版本http://www.vim.org/scripts/script.php?script_id=1440,這裏選用舊版本的Winmanger)。
1)像其它插件同樣,將NERDTree安裝包解壓到~/.vim目錄。並進入doc目錄,在Vim命令行下運行"helptags ."命令。
2)MiniBufExplorer只有一個.vim文件,將其拷貝到~/.vim/plugin目錄。
3)在~/.vimrc文件中加入如下幾行:
[plain] view plain copy
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMoreThanOne=0
4)將Winmanager安裝包解壓到~/.vim目錄。
5)在~/.vimrc文件中加入如下幾行:
[plain] view plain copy
let g:NERDTree_title="[NERDTree]"
let g:winManagerWindowLayout="NERDTree|TagList"
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap wm :WMToggle<CR>
6)這個版本的Winmanager好像有個小bug,你在打開Winmanager界面時,會同時打開一個空的文件。這會影響後續使用,因此咱們要在打 開Winmanager時關掉這個空文件。在~/.vim/plugin目錄下的winmanager.vim文件中找到如下函數定義並在第5行下添加第 6行的內容:
[plain] view plain copy
function! <SID>ToggleWindowsManager()
if IsWinManagerVisible()
call s:CloseWindowsManager()
else
call s:StartWindowsManager()
exe 'q'
end
endfunction
到這裏,就大功告成了!
如今進入咱們的項目目錄,打開Vim,按下組合快捷鍵w-m就能夠咱們的嶄新的Vim了!再次按下w-m就可關閉界面。示圖以下:
界面最上面的一條窄邊就是MiniBufExplorer,能夠看到我打開了兩個文件cache.c和assoc.c,是否是很像VS的標籤?
緊靠MiniBufExplorer下方左邊的矩形區域就是NERDTree。在這個窗口,咱們能夠用鼠標或鍵盤方便的瀏覽整個文件系統,在某個文件上點擊或回車,就能夠在右邊編輯區域打開該文件。
NERDTree下方的就是前面安裝的Taglist界面。
7. 安裝molokai主題:
下載地址:http://www.vim.org/scripts/script.php?script_id=2340
下載後將其複製到vim7x/colors文件夾,例如個人:
mv Downloads/molokai.vim /usr/local/share/vim/vim73/colors/molokai.vim
8.NERD_commenter.vim 註釋插件
https://github.com/scrooloose/nerdcommenter
也是程序員很是實用的一款插件,支持各類語言的補全,只要你能想到的,放心他絕對註釋的了,並且還支持單行註釋,批量註釋,等各類命令映射,在這裏,我把最經常使用的鍵映射在vimrc中配置了一下。
|
這樣的話,在光標所在行上,按下一次ctrl+h是註釋,再按下一次是取消註釋。
而其內建的指令,cm是多行註釋,相似C++的/**/,,cu是取消註釋。
9. DoxygenToolkit.vim 由註釋生成文檔,而且可以快速生成函數標準註釋 下載地址
這個插件使得vim可以生成標準的函數註釋,如圖:
map fg : Dox<cr> let g:DoxygenToolkit_authorName="dantezhu" let g:DoxygenToolkit_licenseTag="My own license\<enter>" let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK" let g:DoxygenToolkit_briefTag_pre = "@brief\t" let g:DoxygenToolkit_paramTag_pre = "@param\t" let g:DoxygenToolkit_returnTag = "@return\t" let g:DoxygenToolkit_briefTag_funcName = "no" let g:DoxygenToolkit_maxFunctionProtoLines = 30
map fg : Dox<cr> let g:DoxygenToolkit_authorName="dantezhu" let g:DoxygenToolkit_licenseTag="My own license\<enter>" let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK" let g:DoxygenToolkit_briefTag_pre = "@brief\t" let g:DoxygenToolkit_paramTag_pre = "@param\t" let g:DoxygenToolkit_returnTag = "@return\t" let g:DoxygenToolkit_briefTag_funcName = "no" let g:DoxygenToolkit_maxFunctionProtoLines = 30
讀者能夠須要將 DoxygenToolkit_authorName設置成爲本身的名字,OK,這樣標準格式的代碼註釋就出來啦。
10. a.vim .cpp和.h文件快速切換 下載地址
把下載的a.vim放到plugin下,不須要配置。
直接能夠:A,打開.cpp和.h對應的文件,:AV,打開.cpp和.h對應的文件,而且分屏,截圖以下:
OK,若是你按照個人說明將vim配置了下來,那麼你的vim應該已是一個超級強悍的IDE啦,快去寫寫代碼試試吧,是否是和以前非常不一樣了啊,哈哈。
:A 切換當前文件的頭文件,在當前窗口打開(或者反過來)
:A switches to the header file corresponding to the current file being edited (or vise versa)
:AS 功能同:A,可是切換到水平分割窗口的打開
:AS splits and switches
:AV 功能同:A,可是切換到豎直分割的窗口打開
:AV vertical splits and switches
:AT 功能同:A,可是切換到標籤頁打開
:AT new tab and switches
:AN cycles through matches
:IH switches to file under cursor
:IHS splits and switches
:IHV vertical splits and switches
:IHT new tab and switches
:IHN cycles through matches
<Leader>ih switches to file under cursor
<Leader>is switches to the alternate file of file under cursor (e.g. on <foo.h> switches to foo.cpp)
<Leader>ihn cycles through matches
http://blog.chinaunix.net/uid/20758579/frmd/75261.html
http://www.vimer.cn/2009/10/%E6%8A%8Avim%E6%89%93%E9%80%A0%E6%88%90%E4%B8%80%E4%B8%AA%E7%9C%9F%E6%AD%A3%E7%9A%84ide3.html
一,安裝kscope:
ubuntu 10.04 64bit下安裝kscope主要得解決兩個問題:一是找回ubuntu9之後缺乏的kde3.5並安裝上去,二是下對64bit版本。
sudo wget http://archive.ubuntu.com/ubuntu/pool/universe/k/kscope/kscope_1.6.0-1_amd64.deb
sudo dpkg -i kscope_1.6.0-1_amd64.deb
sudo apt-get -fy install
上述命令是下載正確版本的kscope,第一次用dpkg安裝會報錯,apt-get -fy會把缺失的全部庫都下下來。
sudo wget http://ftp.debian.org/debian/pool/main/k/kdebase/kate_3.5.9.dfsg.1-6+lenny1_amd64.deb
sudo dpkg --install kate_3.5.9.dfsg.1-6+lenny1_amd64.deb
sudo dpkg -i kscope_1.6.0-1_amd64.deb
把缺失的kde3.5手動裝上,這下再安裝kscope就成功了。
Reference
http://blog.csdn.net/wooin/article/details/1858917
Also recommend a color scheme, Lucius, available here http://www.vim.org/scripts/script.php?script_id=2536
python:
http://www.chengxuyuans.com/Python/73621.html
https://github.com/scrooloose/syntastic
http://blog.csdn.net/wklken/article/details/907662