日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vim + cscope + kscope

發布時間:2024/9/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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>

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中配置了一下。


    • ,ca,在可選的注釋方式之間切換,比如C/C++ 的塊注釋/* */和行注釋//

    • ,cc,注釋當前行

    • ,c ,切換注釋/非注釋狀態

    • ,cs,以”性感”的方式注釋

    • ,cA,在當前行尾添加注釋符,并進入Insert模式

    • ,cu,取消注釋

    • Normal模式下,幾乎所有命令前面都可以指定行數

    • Visual模式下執行命令,會對選中的特定區塊進行注釋/反注釋

    這樣的話,在光標所在行上,按下一次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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 毛片一级免费 | 成人黄色a| 欧美裸体xxxx | 波多野结衣精品视频 | 香蕉视频在线观看黄 | 成人h动漫精品一区二区无码 | 91av在线网站| 欧美日韩国产中文 | 伊人98| 国产精品黄 | 久久婷婷色| 亚洲欧洲在线观看 | 国产成人精品在线播放 | 中文字幕一区二区久久人妻 | 夜夜骑av| 国内精品久久99人妻无码 | 岛国av在线免费观看 | 欧美少妇一区二区三区 | 无码人妻一区二区三区线 | 日本在线看片 | 亚洲色妞| 日本肉体xxxⅹ裸体交 | 一区二区三区不卡视频 | 欧美色图视频在线 | 久久国产欧美日韩精品 | 亚洲成人激情在线 | 中文字av | 免费在线观看a级片 | 国产理论一区 | 伊人久久久久久久久久久久 | 亚洲色图网友自拍 | 日韩三级精品 | 亚洲第一黄网 | 蜜桃视频在线观看网站 | 91伦理在线 | 欧美精品一区二区三区久久 | 中文字幕免费看 | 欧美午夜视频在线观看 | 免费毛片看片 | 国产刺激视频 | 日韩无套无码精品 | 在线视频第一页 | 波多野结衣黄色网址 | 免费精品在线 | 男人操女人下面视频 | 亚洲欧美综合视频 | 国产xxxx| 玖玖爱精品 | 国产手机在线观看 | 中文字幕一区在线播放 | 男女交性视频播放 | av鲁丝一区鲁丝二区鲁丝三区 | 欧美亚洲国产日韩 | 黄色国产视频网站 | 国产在线无码精品 | 狠狠干网址| 久久久久久久久久一区二区 | 男人日女人的网站 | 91看片黄色 | 91在线网 | 麻豆一区二区三区在线观看 | 久久精品人妻一区二区 | 成人性生交大片免费看r链接 | 午夜噜噜| 在线观看a视频 | 性猛交ⅹxxx富婆video | 97在线视频人妻无码 | 伊人影院亚洲 | 欧美日韩国产中文 | 综合久久2o19| 午夜精品一区二区三 | 理论片午午伦夜理片影院99 | 全黄性高潮 | 国产精品.xx视频.xxtv | 在线免费观看福利 | 牛牛视频在线观看 | 激情五月综合网 | 调教亲女小嫩苞h文小说 | 国产一区二区黑人欧美xxxx | 91猎奇在线观看 | 9999久久久久| 国产第一精品视频 | 日韩插 | 成人欧美一区二区三区黑人一 | 久色99 | 欧美色精品在线 | av五月| 国模精品一区 | 国产精品分类 | 国产乱码精品一区二区三 | 成人91视频 | 一本一道av无码中文字幕 | 成人www视频 | 蜜桃av一区二区 | 久久大胆视频 | 欧美视频h | 色资源av| 日日操夜夜摸 | 999久久久免费精品国产 |