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用于显示打开的文件中定义的全局变量、宏、函数命令,
常用命令:
map :TlistToggle
taglist窗口中的快捷键:
+
打开一个折叠,同zo-
将tag折叠起来,同zc*
打开所有的折叠,同zR=
将所有tag折叠起来,同zM在.vimrc中配置let Tlist_Use_Right_Window = 1可以使taglist窗口显示在右侧
5.插件The-NERD-tree
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这个文件的文件(们)
选项设置
" 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