1.先安装ctags
yum install ctags2.在home下设置一般用户的如下几个目录
[wm@adx ~]$ mkdir -p .vim/plugin
[wm@adx ~]$ mkdir -p .vim/doc
[wm@adx ~]$ mkdir -p .vim/tags
[wm@adx ~]$ mkdir -p .vim/syntax3.创建一般用户的vimrc
[wm@adx ~]$ cp /etc/vimrc .vimrc
[wm@adx ~/.vim/doc]$ wget http://ncu.dl.sourceforge.net/project/vimcdoc/vimcdoc/1.8.0/vimcdoc-1.8.0.tar.gz[wm@adx ~/.vim/doc]$ tar zxvf vimcdoc-1.8.0.tar.gz
[root@adx /home/wm/mbase]# ctags -R
[root@adx /home/wm/mbase]# ls
doc Make.env maketool README.md
lib Makefile premake.sh tags
7.打造一个IDE的左侧导航函数列表样式,先下载TagList
[wm@adx ~/mbase/maketool]$ cd ~/.vim
[wm@adx ~/.vim]$ wget http://www.vim.org/scripts/download_script.php?src_id=19574解压
[wm@adx ~/.vim]$ ls
doc plugin syntax taglist_46.zip tags
[wm@adx ~/.vim]$ unzip taglist_46.zip
Archive: taglist_46.zip
inflating: plugin/taglist.vim
inflating: doc/taglist.txt 编辑home里的~/.vimrc。并添加如下两行
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1最后vim进入一个.c源文件,并输入:TList,就可以看见左侧的导航目录了,一般的操作是同时按下Ctrl+w+(hjkl)来选择窗口,在左侧选择函数后,按回车键就能跳入到相对应的定义函数域中。
8.文件浏览器和窗口管理器的添加
[wm@adx ~/mbase/maketool]$ cd ~/.vim
[wm@adx ~/.vim]$ wget http://www.vim.org/scripts/download_script.php?src_id=754解压
[wm@adx ~/.vim]$ unzip winmanager.zip
Archive: winmanager.zip
inflating: plugin/winfileexplorer.vim
inflating: plugin/wintagexplorer.vim
inflating: plugin/winmanager.vim
inflating: doc/winmanager.txt 编辑home里的~/.vimrc。并添加如下两行
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>通过vim进入一个.c源文件,直接输入wm,就能预览9.cscope的使用,用途类似ctags,但功能更强大,可实现任意跳转。
[wm@adx ~/.vim]$ wget http://nchc.dl.sourceforge.net/project/cscope/cscope/15.8a/cscope-15.8a.tar.gz也是解压到.vim这个目录下,make install需要root权限
[wm@adx ~/.vim]$ tar zxvf cscope-15.8a.tar.gz
[wm@adx ~/.vim]$ cd cscope-15.8a[wm@adx ~/.vim/cscope-15.8a]$ ./configure
[wm@adx ~/.vim/cscope-15.8a]$ make
[root@adx /home/wm/.vim/cscope-15.8a]# make install
编辑
[wm@adx ~]$ vim .vimrc 添加如下语句
:set cscopequickfix=s-,c-,d-,i-,t-,e-
[wm@adx ~/mbase]$ cscope -Rbq
[wm@adx ~/mbase]$ ls
cscope.in.out cscope.po.out lib Makefile premake.sh tags
cscope.out doc Make.env maketool README.md生成三个cscope文件
进入vim的一个.c源文件后,需要直接输入如下命令
:cs add /home/wm/mbase/cscope.out /home/wm/mbase
cscope的主要功能是通过同的子命令"find"来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
| 0 或 s | 查找本 C 符号(可以跳过注释) |
| 1 或 g | 查找本定义 |
| 2 或 d | 查找本函数调用的函数 |
| 3 或 c | 查找调用本函数的函数 |
| 4 或 t | 查找本字符串 |
| 6 或 e | 查找本 egrep 模式 |
| 7 或 f | 查找本文件 |
| 8 或 i | 查找包含本文件的文件 |
实例
查找fn函数,按下回车后会自动跳转到fn()的定义处.
:cs find g fn
按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果。
:cs find c vim_strsave
如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:
:cw
如果每次查找都要输入一长串命令的话还真是件讨人厌的事情, Cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:
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>当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl+Shift+-", 然后很快再按"g"
10.快速浏览和操作Buffer -- 插件: MiniBufExplorer
[wm@adx ~/.vim]$ cd plugin/
[wm@adx ~/.vim/plugin]$ pwd
/home/wm/.vim/plugin
[wm@adx ~/.vim/plugin]$ wget http://www.vim.org/scripts/download_script.php?src_id=3640
--15:07:01-- http://www.vim.org/scripts/download_script.php?src_id=3640
Resolving www.vim.org... 216.34.181.97可以通过vim打开多个源文件 vim file1 file2
可以通过快捷键切换标签buf,S是Shift键
| <Tab> | 向前循环切换到每个buffer名上 |
| <S-Tab> | 向后循环切换到每个buffer名上 |
| <Enter> | 在打开光标所在的buffer |
| d | 删除光标所在的buffer |
以下的两个功能需要在~/.vimrc中增加:
let g:miniBufExplMapCTabSwitchBufs = 1
| <C-Tab> | 向前循环切换到每个buffer上,并在当前窗口打开 |
| <C-S-Tab> | 向后循环切换到每个buffer上,并在当前窗口打开 |
11.c/h文件间相互切换 -- 插件: A
[wm@adx ~/.vim]$ cd plugin/
[wm@adx ~/.vim/plugin]$ pwd
/home/wm/.vim/plugin
[wm@adx ~/.vim/plugin]$ wget http://www.vim.org/scripts/download_script.php?src_id=7218
--15:29:57-- http://www.vim.org/scripts/download_script.php?src_id=7218安装好a.vim后有下面的几个命令可以用了:
| :A | 在新Buffer中切换到c/h文件 |
| :AS | 横向分割窗口并打开c/h文件 |
| :AV | 纵向分割窗口并打开c/h文件 |
| :AT | 新建一个标签页并打开c/h文件 |
在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :A<CR>意思是按F12时在一个新的buffer中打开c/h文件, 这样在写程序的时候就可以不假思索地在c/h文件间进行切换, 减少了按键的次数,
12.在工程中查找 -- 插件: Grep
[wm@adx ~/mbase/lib/mnl]$ cd ~/.vim/plugin/
[wm@adx ~/.vim/plugin]$ pwd
/home/wm/.vim/plugin
[wm@adx ~/.vim/plugin]$ wget http://www.vim.org/scripts/download_script.php?src_id=19966下面介绍它的用法(摘抄):
vim有自己的查找功能, 但是跟shell中的grep比起来还是有些差距的, 有时Coding正火急火燎的时候, 真想按下F3, 对光标所在的词来个全工程范围的grep, 不用敲那些繁琐的命令, 现在福音来了, 跟我同样懒的人不在少数, 在grep.vim脚本的前部可以找到一些说明文档:
| :Grep | 按照指定的规则在指定的文件中查找 |
| :Rgrep | 同上, 但是是递归的grep |
| :GrepBuffer | 在所有打开的缓冲区中查找 |
| :Bgrep | 同上 |
| :GrepArgs | 在vim的argument filenames (:args)中查找 |
| :Fgrep | 运行fgrep |
| :Rfgrep | 运行递归的fgrep |
| :Egrep | 运行egrep |
| :Regrep | 运行递归的egrep |
| :Agrep | 运行agrep |
| :Ragrep | 运行递归的agrep |
上面的命令是类似这样调用的:
| :Grep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Rgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Fgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Rfgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Egrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Regrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Agrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :Ragrep [<grep_options>] [<search_pattern> [<file_name(s)>]] |
| :GrepBuffer [<grep_options>] [<search_pattern>] |
| :Bgrep [<grep_options>] [<search_pattern>] |
| :GrepArgs [<grep_options>] [<search_pattern>] |
在~/.vimrc中增加了一句:
nnoremap <silent> <F3> :Grep<CR>
在最下面的命令行会显示:
Search for pattern: mb64_encodeblock此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:
Search for pattern: /<mb64_encodeblock/> 然后按下回车:
13.高亮的书签 -- 插件: VisualMark
14.自动补全
确保安装ctags5.6版本
在~/.vimrc中增加了一句:
filetype plugin indent on打开文件类型检测, 加了这句才可以用智能补全set completeopt=longest,menu
关掉智能补全时的预览窗口
打开一个.c源码
[wm@adx ~/mbase/lib/mnl]$ vim mb64.c设置tags文件
:set tags=/home/wm/mbase/tags然后按下"Ctrl+X Ctrl+O", 此时会弹出一个下列菜单, 显示所有匹配的标签, 如下图:
一些重要的快捷键
| Ctrl+P | 向前切换成员 |
| Ctrl+N | 向后切换成员 |
| Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
| Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
新成员不能马上自动补全,需要重新生成一下tags文件即可。
vim中的其他补全方式还有:
| Ctrl+X Ctrl+L | 整行补全 |
| Ctrl+X Ctrl+N | 根据当前文件里关键字补全 |
| Ctrl+X Ctrl+K | 根据字典补全 |
| Ctrl+X Ctrl+T | 根据同义词字典补全 |
| Ctrl+X Ctrl+I | 根据头文件内关键字补全 |
| Ctrl+X Ctrl+] | 根据标签补全 |
| Ctrl+X Ctrl+F | 补全文件名 |
| Ctrl+X Ctrl+D | 补全宏定义 |
| Ctrl+X Ctrl+V | 补全vim命令 |
| Ctrl+X Ctrl+U | 用户自定义补全方式 |
| Ctrl+X Ctrl+S | 拼写建议 |
15. 自动补全功能,提示函数原形-- 插件: echofunc(已存在功能,不需要添加了)
[wm@adx mnl]$ cd ~/.vim/plugin/
[wm@adx plugin]$ wget http://www.vim.org/scripts/download_script.php?src_id=17383
nmap <F9> <Esc>:!ctags -R --fields=+lS *<CR>
加入打开项目中的任意一个文件,按下F9产生tags文件,再导入tags(set tags=tags),当输入某一函数名再加(时,屏幕底端就会出现该函数的原型。
补充
echofunc插件对库函数不起作用,如果想在输入库函数时也能显示函数原型,可以使用如下办法,或者在.vim文件夹下创建systags文件夹。
(1)cd /usr/include
(2) sudo ctags -R --fields=+lS
(3)在.vimrc中加入set tags=/usr/include/tags
方法二
系统库函数名补全、原型预览等功能,相当于把tags文件产生到.vim文件夹下
[root@adx /home/wm/.vim]# ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --fields=+S -R -f /home/wm/.vim/systags /usr/include /usr/local/include
set tags+=~/.vim/systags
15.加速你的补全 -- 插件: SuperTab
17.补充命令
直接指定一个tags后,就可以通过ctrl+]组合键进行跳转到定义了。同时按下ctrl+T回到刚才跳转位置处。
vim 7.0版本以上内置了自动补全,快捷键和omnicppcomplete一样。
都是ctrl+x ctrl+o(智能补全)
或ctrl + n
或ctrl+p ,
或是 ctrl+x ctrl+f(补全文件名)
ctrl+x是进入一种模式。
但是如果omnicppcomplete插件,是无法做到 输入 “." “->"自动智能补全的。
stl的自动补全需要下载STL源码,然后会STL源码产生tags文件,然后把这个文件写到vimrc中就可以啦。
ctrl + ]只能进入有定义的函数,不能进入只有声明的函数。
确保已关闭了vi兼容模式,并允许进行文件类型检测:
set nocp
filetype plugin on
生成标签文件
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
在对C++文件进行补全时,OmniCppComplete插件需要tag文件中包含C++的额外信息,因此上面的ctags命令不同于以前我们所使用的,它专门为C++语言生成一些额外的信息,上述选项的含义如下:
--c++-kinds=+p : 为C++文件增加函数原型的标签
--fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
本文介绍了在CentOS系统下构建C++编程IDE环境的步骤,包括安装ctags、设置TagList、添加文件浏览器、集成cscope进行代码查找、使用MiniBufExplorer管理缓冲区、配置grep插件进行搜索、应用VisualMark做书签、设置自动补全功能,并详细说明了如何为系统库函数启用自动补全和原型预览。
4274

被折叠的 条评论
为什么被折叠?



