1.先安装ctags
yum install ctags
[wm@adx ~]$ mkdir -p .vim/plugin
[wm@adx ~]$ mkdir -p .vim/doc
[wm@adx ~]$ mkdir -p .vim/tags
[wm@adx ~]$ mkdir -p .vim/syntax
3.创建一般用户的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
通过vim进入一个.c源文件,直接输入wm,就能预览
[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 s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=expand("")$
nmap d :cs find d =expand("")
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
可以通过快捷键切换标签buf,S是Shift键
向前循环切换到每个buffer名上 | |
向后循环切换到每个buffer名上 | |
在打开光标所在的buffer | |
d | 删除光标所在的buffer |
以下的两个功能需要在~/.vimrc中增加:
let g:miniBufExplMapCTabSwitchBufs = 1
向前循环切换到每个buffer上,并在当前窗口打开 | |
向后循环切换到每个buffer上,并在当前窗口打开 |
[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 | 在新Buffer中切换到c/h文件 |
:AS | 横向分割窗口并打开c/h文件 |
:AV | 纵向分割窗口并打开c/h文件 |
:AT | 新建一个标签页并打开c/h文件 |
nnoremap :A
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
:Grep | 按照指定的规则在指定的文件中查找 |
:Rgrep | 同上, 但是是递归的grep |
:GrepBuffer | 在所有打开的缓冲区中查找 |
:Bgrep | 同上 |
:GrepArgs | 在vim的argument filenames (:args)中查找 |
:Fgrep | 运行fgrep |
:Rfgrep | 运行递归的fgrep |
:Egrep | 运行egrep |
:Regrep | 运行递归的egrep |
:Agrep | 运行agrep |
:Ragrep | 运行递归的agrep |
:Grep [ |
:Rgrep [ |
:Fgrep [ |
:Rfgrep [ |
:Egrep [ |
:Regrep [ |
:Agrep [ |
:Ragrep [ |
:GrepBuffer [ |
:Bgrep [ |
:GrepArgs [ |
在~/.vimrc中增加了一句:
nnoremap :Grep
在最下面的命令行会显示:
Search for pattern: mb64_encodeblock此时你还可以编辑该行, grep支持正则表达式, 你想全词匹配的话可以改成:
Search for pattern: /
13.高亮的书签 -- 插件: VisualMark
14.自动补全
确保安装ctags5.6版本
在~/.vimrc中增加了一句:
filetype plugin indent on
打开文件类型检测, 加了这句才可以用智能补全
set completeopt=longest,menu
关掉智能补全时的预览窗口
打开一个.c源码
[wm@adx ~/mbase/lib/mnl]$ vim mb64.c
:set tags=/home/wm/mbase/tags
一些重要的快捷键
Ctrl+P | 向前切换成员 |
Ctrl+N | 向后切换成员 |
Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
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 :!ctags -R --fields=+lS *
加入打开项目中的任意一个文件,按下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
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 : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全