vim + cscope + kscope
2019獨角獸企業重金招聘Python工程師標準>>>
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功能
????i:?查找包含本文件的文件
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.h
非常有用的鏈接
??? http://blog.csdn.net/wklken/article/details/9076621
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.vim
" 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無法找到相關符號信息。
支持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>
" // 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
轉載于:https://my.oschina.net/u/238880/blog/68568
總結
以上是生活随笔為你收集整理的vim + cscope + kscope的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim开启自动缩进
- 下一篇: 修改Oracle数据库字符集