最近VIM用得比较多,因此在学了很多。在这里对收获到的东西作一个总结。 php
vim配合这3件东西以后,极为强大。与SourceInsight有一拼。 shell
ctags叫做“标签”,它记录源码中全部标识符定义所在的文件与行号。 编程
先在命令终端运行一下: vim
$ ctags --version
看一下当前系统有有没有安装ctags,若是有就跳过本节。 ide
我是在http://ctags.sourceforge.net/上下载的最近的源码,解压,配置,编译,安装。 函数
$ tar zxvf ctags-5.8.tar.gz $ cd ctags-5.8 $ ./configure && make ... $ sudo make install
而后再检查一下是否成功安装 学习
$ ctags --version
一般是没问题的。 this
在我们的源码目录下执行简单的 spa
$ ctags -R .
ctags就会遍历当前目录下的全部.c,.h,.cpp文件,提取全部的标识符并记录到tags文件中。 .net
进入vim可又使用标签参数,使vim打开时跳到标签所在位置。若是咱们要找WinMain,以下:
$ vi -t WinMain
进行vim以后,经常使用的几个命令:
快捷键:
cscope比ctags更强大,它不只记录标识符定义所在的位置,还记录了标识符(函数)之间的调用关系与文件的包含关系,功能更多。只不过没ctags使用简单。
一样先检查一下cscope有没有安装。
若是没有安装就从网上下载源码进行安装。下载地址:http://cscope.sourceforge.net/
一样步骤:解压,配置,编译,安装。与ctags同样。
与ctags相似,首先得生成一个cscope.out文件。这个文件与tags文件功能相似,但比较复杂。
$ find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files $ cscope -bkq -i cscope.files $ rm cscope.files
cscope就会生成一个cscope.out文件。
而后在当前的目录下打开vim。在vim在执行命令将cscope.out加进来:
: cs add cscope.out
好了,如今cscope就可又用了。
经常使用的搜索命令格式:
: cs find {querytype} {ident} 或 : cs f {querytype} {ident}
其中{querytype}表示:
num | querytype | function descript |
0 | s | C符号出现过的地方 |
1 | g | 定义的地方 |
2 | d | 被这个函数调用的函数列表 |
3 | c | 调用这个函数的函数列表 |
4 | t | 搜字串 |
6 | e | egrep匹配 |
7 | f | 搜索文件 |
8 | i | 包含这个文件的文件列表 |
一般咱们会在~/.vimrc文件中进行一下按键映射,使操做便简便:
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR> 或 nmap <C-@>s :cs find s <C-R><C-W><CR>
其实的依此类推:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 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 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-@>s 表示 [Ctrl+空格] 后再按 s 键。
个人安装使用没有上面说的那么顺。使用的时候,我执行
:cs add cscope.out
显示:
E319: Sorry, the command is not available in this version.
最后出的缘由是编译的时候没有加入cscope模块。
执行vim命令查看:
$ vim --version | grep cscope ... -cscope ...
cscope前是减号,说明当前vim里没有加入这个模块。
找到vim的源码包,进入源码路译。
$ ./configure --help | grep cscope --enable-cscope Include cscope interface
说明若是要在vim中使用cscope,就得在配置的时候加入--enable-cscope参数。以下:
$ ./configure --enable-cscope && make
编译完了以后,先别急着安装,检查一下新编译的vim可执行文件是否具备cscope功能。
$ .src/vim --version | grep cscope ... +cscope ...
若是看到cscope前面是个加号,就表示有cscope功能。
而后才是安装:
$ sudo make install
安装完了以后,还要检查一下vi有没有更新。常常有网友问为何加了--enable-cscope编译安装仍是不行呢?缘由是,你安装的是vim,而vi在某些系统里是另外一个独立的程序,vi不会自动更新。
将原来的vi连接为新安装的vim
$ vi_path=`which vi` $ sudo rm $vi_path $ sudo ln -s `which vim` $vi_path
OK,咱们再来检验一下vi是否还有cscope功能。
$ vi --version | grep cscope ... +cscope ...
如上就对了!
上面讲了ctags与cscope,若是你把上面两样用熟了,vim是很强大的。
taglist是一个插件,它可又显示光标所在文件的文件结构,包括函数、类、宏定义等等。很少说,这个插件在网上有下载:http://www.vim.org/scripts/script.php?script_id=273
下载后,解压到~/.vim目录下。其实里面就只有两个件:
具体怎么作,上面那个网页写的很清楚了。
其实我在系统上一安装好vim后,就会当即到网上去下载一个.vimrc启动配置文件。如下是我以前收藏共享的经过模板(不是我写的,我只根据个人习惯改):http://www.oschina.net/code/snippet_243525_20881
你们可又去下载,覆盖~/.vimrc便可。
在我共享的这个~/.vimrc中,已经包括了基本的缩进、颜色、Tab宽以及对ctags, cscope, taglist 等组件的配置。这里我例举几个里面已提供的功能。
建议你们本身去学习这个文件的内容。