vim打造成IDE
在Windows下编写代码有各种IDE软件,比如MSVS/eclipse等,但在linux下面就没有对应的IDE工具给开发者了。导致在github上fock的项目代码看起来很不方便,使那些想玩linux编程但是又因为编写代码不方便的同学望而却步。其实linux下原生的vim编辑器堪称神器功能很强大,而且最重要的是可以根据自己的习惯自己定制、全程操作不需要使用鼠标。本文介绍如何将vim定制成一个适用的IDE。
IDE相对于纯粹的文本编辑工具最明显的优点就是能快速跳转到变量活函数定义、查找某个函数被什麽函数调用了、或是某个函数调用了那些其他函数、打标记、快速的文件内跳转以及文件间的跳转。vim同样可以实现同样的功能。
1 cscope介绍:
Cscope是一款开源免费的C/C++浏览工具,自带一个基于文本的用户界面,通过cscope可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息.Cscope对C/C++支持较好,也可以自己定制来支持Java和Perl、Python等脚本语言。Vim和gvim都提供了cscope接口,通过适当的配置,可以在Unix/Linux下实现变量、函数、文件等之间跳转,就像Windows下的SourceInsight一样灵活易用。由于cscope是开源免费的,而且配合vim可以脱离鼠标,实现全键盘操作,方便快捷地浏览源代码,深受程序员、Geek等人士的喜爱。
首次使用Cscope时,他会根据源文件生成符号数据库。然后在以后的使用中,cscope只是在源文件有改动或源文件列表不同时才会重建数据库。当在重建数据库时,未改动过的文件对应的数据库信息会从旧的数据库中拷贝过来,所以会使重建数据库快于一开始的新建数据库。
当你在命令行下调用cscope时,你会获得一个全屏选择窗口,能够使你查询特定的内容。然而,一旦你查询的有匹配,那么就会用你默认的编辑器来编辑该源文件,但是你不能够简单的使用Ctrl+]或者:tag命令来从一个标签跳转到另一个标签。
Vim中的cscope接口是通过以命令行形式调用完成的,然后解析查询返回的结果。最终的结果就是cscope查询结果就像通常的tags一样,这样你就可以自由跳转,就像在使用通常的tags(用ctrl+]或者:tag跳转)。
2 cscope使用
建立当前源代码建立数据库索引文件,首先进入源码根目录然后运行下面的命令:
cscope -Rbkq
可以根据自己的实际情况选择命令组合生成不同特性的数据库索引文件
R表示把所有子目录里的文件也建立索引
b表示cscope不启动自带的用户界面,而仅仅建立符号数据库
q生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
k在生成索引文件时,不搜索/usr/include目录
add:增加一个新的cscope数据库/链接库
使用方法:
:cs add {file|dir} [pre-path] [flags]
其中:
[pre-path]就是以-p选项传递给cscope的文件路径,是以相对路径表示的文件
前加上的path,这样你不要切换到你数据库文件所在的目录也可以使用它了。
[flags]你想传递给cscope的额外旗标
实例:
:cscope add /root/code/vimtest/ftpd
:cscope add /project/vim/cscope.out /usr/local/vim
:cscope add cscope.out /usr/local/vim –C
find:查询cscope。所有的cscope查询选项都可用除了数字5(“修改这个匹配模式”)。
使用方法:
:cs find {querytype} {name}
其中:
{querytype}即相对应于实际的cscope行接口数字,同时也相对应于nvi命令:
0或者s —— 查找这个C符号
1或者g —— 查找这个定义
2或者d —— 查找被这个函数调用的函数(们)
3或者c —— 查找调用这个函数的函数(们)
4或者t —— 查找这个字符串
6或者e —— 查找这个egrep匹配模式
7或者f —— 查找这个文件
8或者i —— 查找#include这个文件的文件(们)
实例:(#号后为注释)
:cscope find c ftpd_send_resp #查找所有调用这个函数的函数(们)
:cscope find 3 ftpd_send_resp #和上面结果一样
reset:重新初始化所有的cscope链接。
使用方法:
:cs reset
show:显示cscope的链接
使用方法:
:cs show
3在vim中使用cscope
在vim中使用cscope有两种方式,一种是打开源文件之后通过add命令手动加入cscope为源文件生成的符号数据库。比如在vim处于命令接受状态时输入命令:csadd cscope.out此时就可以输入cscope的命令查找函数定义之类的操作了。第二中方式也是推荐的方式,将加入符号数据库写进vim的配置文件~/.vimrc文件里面
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=0
set cst
set nocsverb
"add any database in current directory
if filereadable("cscope.out")
csadd cscope.out
"else add database pointed to by environment
elseif $CSCOPE_DB != ""
csadd $CSCOPE_DB
endif
set csverb
endif
需要特别注意的是setcsprg后面的路径是cscope安装路径,要根据个人cscope实际的安装路径填写。
通过设置’cscopetag’,我们已经有效的将所有:tag的情况都替换为:cstag。这包括:tag、ctrl+],和”vim-t”。然后,正常的tag命令就会不光在tag文件中查找,也会在cscope数据库中查找。
此时用vim打开任意一个源文件,都可以方便跳转讨函数或变量的定义即使这个函数或变量定义在其他的文件里面。
但是又回遇到另外一个问题是,如果要跳回到跳转之前的位置该怎麽操作。下面介绍一些在IDE下面用到的功能在vim下怎麽操作。
(1)查找某个字符串:在vim处于命令接受状态下输入/findstr然后回车就会在当前文件找到你要查找的字符串如果有多个匹配可以按n向下查找shift+n当然就是方向查找了。
(2)跳转:跳转到原先的位置可以通过快捷键Ctrl+O向后跳转Ctrl+i向前跳转。还可以打标签通过命令ma其中a是标签的标号,后续可以通过‘a跳转到打标签的地方
到现在位置,一个简单的IDE工具已经完成了。后续可以自己定制出适合自己习惯的vim编辑工具,通过编辑它的配置文件~/.vimrc。而且vim有很强大的命令系统,后面的文章会专门介绍vim的基本命令。