vim环境搭建:安装vimgdb、使用ctags

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sbjiesbjie/article/details/49466301

1.安装vimgdb
vim中无法使用gdb调试,安装vimgdb(vim的gdb补丁版),可以直接在vim中用gdb调试,参考 vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb

2.使用Vundle管理插件
vim很多功能需要使用插件,使用Vundle方便管理插件
安装Vundle:建立 目录~/.vim/bundle,以后Vundle自动下载的插件都保存在这里。然后,进入 Bundle 目录,使用 git clone 命令:git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 下载Vundle,最后在~/.vimrc中添加如下配置:

  1 #using vundle need filetype off, and set nocompatible
  2 filetype off
  3 set nocompatible
  4 set rtp+=~/.vim/bundle/vundle
  5 call vundle#rc()
  6 
  7 Bundle 'gmarik/vundle'
  8 
  9 "my bundles here
 10 Bundle 'altercation/vim-colors-solarized'
 11 Bundle 'taglist.vim'
 12 Bundle 'The-NERD-TREE'
 13 Bundle 'minibufexpl.vim'
 14 Bundle 'OmniCppComplete'
 15 "bundles end

vundle常用命令:
+ BundleInstall -安装列表中全部插件
+ BundleInstall! -更新列表中全部插件
+ BundleClean -清除列表中没有的插件
+ BundleSearch foo -查找foo插件
+ BundleSearch -列出所有可用的插件,可以在列表中搜索、安装
+ BundleList -列举出列表中(.vimrc中)配置的所有插件

3.使用ctags
ctags可以对代码中的函数,全局变量,宏定义,结构体(类)建立关键字索引,以实现快速查找。使用时,需要先在源码目录下生成tags文件,然后把tags文件路径加到vim的tags变量里set tags=~/path/tags

[read_ng@wukong src]$ ctags -R --c-kinds=+px --fields=+iaS --extra=+q  *.c *.h

vim中执行,set tags=~/path/tags或者写在.vimrc文件里

另外,为了查看系统函数需要生成系统函数的tags,命令如下:

ctags -I  __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ -I __attribute_malloc__ -I __wur --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --f    ields=+iaS --extra=+q  -f ~/.vim/systags /usr/include/* /usr/include/sys/* /usr/include/bits/*  /usr/include/netinet/* /usr/include/arpa/*

生成的tag文件~/.vim/systags,然后添加到tag路径
设置好tag后,就可以使用ctrl+]来跳转了.

tags有一个小技巧,在vimrc文件中set tags=tags; (注意有分号),在vi中使用定位快捷键时会先在当前目录中查找tags文件,找不到的话,就会到父目录中找,依次类推.

ctags常用快捷键和命令:

命令 用途
ctrl+] 跳转到光标所在关键字的第一处标签
g ctrl+] 如果有多个标签会列出来供选择,如果只有一个,则直接跳转
:tag {keyword} 跳转到keyword的第一处标签
:tjump {keyword} 如果有多个标签会列出来供选择,如果只有一个,则直接跳转
:pop 或者只ctrl+t 反向遍历标签位置
:tag 正向遍历标签位置
:tnext 跳到下一个匹配的标签
:tprev 跳到上一个匹配的标签
:tfirst 跳到第一个匹配的标签
:tlast 跳到最后一个匹配的标签
:tselect 列出标签列表

4.插件taglist
taglist用于显示打开的文件中定义的全局变量、宏、函数命令,
常用命令:

  • :TlistOpen 打开taglist窗口
  • :TlistClose 关闭taglist窗口
  • :TlistToggle 在打开和关闭间切换,可以定义快捷键,如map <C-F12> :TlistToggle<cr>

taglist窗口中的快捷键:

  • : 跳到光标下tag所定义的位置
  • +打开一个折叠,同zo
  • - 将tag折叠起来,同zc
  • *打开所有的折叠,同zR
  • =将所有tag折叠起来,同zM
  • o 在新窗口下打开tag所在的位置
  • 在窗口底部显示光标下tag的原型定义
  • [[跳到前一个文件的tag处
  • ]]跳到后一个文件的tag处

在.vimrc中配置let Tlist_Use_Right_Window = 1可以使taglist窗口显示在右侧

5.插件The-NERD-tree

  • P 跳到根结点
  • p 跳到父结点
  • 展开或者合拢目录、或者跳到当前文件
  • o 在已有窗口中打开文件、目录或书签,并跳到该窗口
  • go 在已有窗口 中打开文件、目录或书签,但不跳到该窗口
  • i split 一个新窗口打开选中文件,并跳到该窗口
  • gi split 一个新窗口打开选中文件,但不跳到该窗口
  • s vsplit 一个新窗口打开选中文件,并跳到该窗口
  • gs vsplit 一个新 窗口打开选中文件,但不跳到该窗口
  • x 合拢选中结点的父目录
  • X 合拢选中结点下的所有目录

6.插件mimibufferexplore
mimibufferexplore会在其窗口中显示buf中的文件列表,
.vimrc中的配置如下:

$HOME/.vimrc 中添加如下配置
let g:miniBufExplMapWindowNavVim = 1 
let g:miniBufExplMapWindowNavArrows = 1 
let g:miniBufExplMapCTabSwitchBufs = 1 
let g:miniBufExplModSelTarget = 1

命令:
+ :bn 打开下一个buf
+ :bp 打开前一个buf
+ :b n是数字,第n个buf

7.插件OmniCppComplete

8.插件supertab

9.使用cscope
ctags只能跳转到函数的定义处,cscope可以查找函数被调用的地方;

  • 安装.
    如果没有安装cscope,需要先安装,下载源码Cscope的主页,三步安装。

  • 生成索引数据库
    在要代码目录下执行cscope -Rbq,会生成三个文件:cscope.out, cscope.in.out, cscope.po.out;cscope在生成数据库时,在项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用”-k“选项。
    cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),如果需要为其它文件生成索引,需要把所有需要解析的文件添加到cscope.files中,当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库,注意cscope.files需要保存文件的完整路径,防止在其它文件路径失效。
    下表中列出了cscope的常用选项:
    -R: 在生成索引文件时,搜索子目录树中的代码
    -b: 只生成索引文件,不进入cscope的界面
    -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
    -k: 在生成索引文件时,不搜索/usr/include目录
    -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”–“,表示由标准输入获得文件列表。

  • 使用
    首先在vim中添加数据库cs add cscope.out;
    :cs show可以显示cscope的连接的数据库,:cs kill num断开编号为num的连接;
    查找命令:
    :cs find {querytype} {name}
    其中,{querytype} 取如下值:
    s —— 查找这个C符号
    g —— 查找这个定义
    d —— 查找被这个函数调用的函数(们)
    c —— 查找调用这个函数的函数(们)
    t —— 查找这个字符串
    e —— 查找这个egrep匹配模式
    f —— 查找这个文件
    i —— 查找#include这个文件的文件(们)

  • 选项设置

    • csprg(cscopecscopeprg)选项用于设置cscope程序的位置。
    • cscopecscopequickfix设定是否使用quickfix窗口来显示cscope的结果,
      执行set cscopequickfix=s-,c-,d-,i-,t-,e-后,可以使用quickfix的Ctrl-n / Ctrl-P 跳转到后一项和前一项纪录,详情请”:help cscopequickfix“;
    • cst(cscopecscopetag),如果你想vim同时搜索tag文件以及cscope数据库;
    • csto(cscopecscopetagorder)选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。
      可以在 .vimrc中增加如下设置:
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
      cs add cscope.out
  endif
  set csverb
endif

参考:
使用vundle管理插件
ctags 生成系统头文件、第三方库头文件的 tag
vi/vim使用进阶: 使用taglist插件
NERDTree 快捷键辑录
Cscope的使用
vi/vim使用进阶: 程序员的利器 – cscope

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页