vim + cscope + kscope

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  

  1. map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>  

        到此,Ctags已安装成功。

 

        使用Ctags的也很简单。 进入我们的项目代码根目录,执行以下命令:

[plain]   view plain   copy  

  1. 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  

  1. let Tlist_Show_One_File=1  

  2. let Tlist_Exit_OnlyWindow=1  

        到此安装已经完成。

 

       在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭。示图如下:

vim + cscope + kscope_第1张图片

        我们可以通过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  

  1. cscope -Rbq -f path/xxx.out  

            命令运行后会生成xxx.out文件,即cscope数据库文件。更多用法参考man cscope文档。

       2)进入项目代码根目录,在Vim下运行命令:

[plain]   view plain   copy  

  1. cs add path/xxx.out  

           此命令将cscope数据库载入Vim。

       3)Cscope常用快捷键

           Ctrl-\ s 查找所有当前光标所在符号出现过位置。
           Ctrl-\ c 查找所有调用当前光标所在函数的函数。

       按下快捷键查找结束后会在编辑区下方出现查找结果的列表,输入结果编号并回车,就能跳转到该查找结果在源代码中的相应位置。例如,我们将光标移到 initial_pool_size变量定义的位置,即17行,然后按下"Ctrl-\ s"组合快捷键,得到示图如下:

vim + cscope + kscope_第2张图片

            然后我们输入2,并回车,就能跳转到第2个查找结果。         

           为了界面更好看,可以把Cscope的查找结果输出到quickfix窗口,需要在~/.vimrc中加入下面这行:

[plain]   view plain   copy  

  1. set cscopequickfix=s-,c-,d-,i-,t-,e-  

            这样,通过快捷键查找某个符号后,会立即跳转到第一个找到的该符号出现的位置。如果你对这次默认跳转的位置不满意,在Vim命令行下运行cw命令,就能在 编辑区下面quickfix窗口看到所有查找结果的列表,点击相应列表项就能跳转到相应位置。这个功能已经跟VS很接近了吧:)

vim + cscope + kscope_第3张图片

        更多功能可通过命令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  

  1. set nocp  

  2. filetype plugin on  

 

       OmniCppComplete的使用几乎跟VS下的VA一样。如下图所示,输入m0.之后立即弹出my_class类中所有的函数列表,然后用上下键选择合适的函数。

vim + cscope + kscope_第4张图片

        更多功能通过在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  

  1. let g:SuperTabDefaultCompletionType="context"  

 

       SuperTab使用很简单,只要在输入变量名或路径名等符号中途按Tab键,就能得到以前输入过的符号列表,并通过Tab键循环选择。

vim + cscope + kscope_第5张图片

 

    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  

  1. let g:miniBufExplMapWindowNavVim = 1   

  2. let g:miniBufExplMapWindowNavArrows = 1   

  3. let g:miniBufExplMapCTabSwitchBufs = 1   

  4. let g:miniBufExplModSelTarget = 1  

  5. let g:miniBufExplMoreThanOne=0  

        4)将Winmanager安装包解压到~/.vim目录。

        5)在~/.vimrc文件中加入以下几行:

[plain]   view plain   copy  

  1. let g:NERDTree_title="[NERDTree]"  

  2. let g:winManagerWindowLayout="NERDTree|TagList"  

  3.   

  4. function! NERDTree_Start()  

  5.     exec 'NERDTree'  

  6. endfunction  

  7.   

  8. function! NERDTree_IsValid()  

  9.     return 1  

  10. endfunction  

  11.   

  12. nmap wm :WMToggle<CR>  

        6)这个版本的Winmanager好像有个小bug,你在打开Winmanager界面时,会同时打开一个空的文件。这会影响后续使用,所以我们要在打 开Winmanager时关掉这个空文件。在~/.vim/plugin目录下的winmanager.vim文件中找到以下函数定义并在第5行下添加第 6行的内容:

[plain]   view plain   copy  

  1. function! <SID>ToggleWindowsManager()  

  2.    if IsWinManagerVisible()  

  3.       call s:CloseWindowsManager()  

  4.    else  

  5.       call s:StartWindowsManager()  

  6.       exe 'q'  

  7.    end  

  8. endfunction  

        到这里,就大功告成了!        

 

        现在进入我们的项目目录,打开Vim,按下组合快捷键w-m就可以我们的崭新的Vim了!再次按下w-m就可关闭界面。示图如下:

vim + cscope + kscope_第6张图片

        界面最上面的一条窄边就是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对应的文件,并且分屏,截图如下:

vim + cscope + kscope_第7张图片

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

你可能感兴趣的:(vim + cscope + kscope)