一、ctags应用
ctags(Generate tag files for source code)是vim下方便代码阅读的工具。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。Linux下VIM简单易用,大家只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法。但是对于Linux下的C/C++的程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择。 ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags, python的ptags).
1、添加快捷命令
打开主目录下的.bash_profile然后添加下面这两天快捷命令。
>alias tag='cscope -Rbq && ctags--c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R.'
>alias tagclean='rm -f cscope.* tags'
2、使用例子
[18:05 @ comport ]$ ls
comport.c cp_common.h cp_comport.c cp_comport.h makefile
[18:05 @ comport ]$ tag
[18:05 @ comport ]$ ls
comport.c cp_common.h cp_comport.c cp_comport.h cscope.in.out cscope.out cscope.po.out makefile tags
[18:05 @ comport ]$ vim comport.c
……….略[这里不做显示,更详细的应用参考①ctag应用]
【1, 光标移动到需要查看的变量或者函数】
【2, ctrl + ] 进行查找跳转】
【3, ctrl + t 跳回原位置】
[18:06 @ comport ]$ ls
comport.c cp_common.h cp_comport.c cp_comport.h cscope.in.out cscope.out cscope.po.out makefile tags
[18:06 @ comport ]$ tagclean
[18:08 @ comport ]$ ls
comport.c cp_common.h cp_comport.c cp_comport.h makefile
①ctag更详细应用:http://www.mcuos.com/thread-8477-1-1.html
二、cscope应用
cscope 是一个 C 语言的浏览工具,通过这个工具可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。目前支持 C 和 C++。cscope 自身带一个基于文本的用户界面,不过gvim 提供了cscope接口,因此可以在 gvim 中调用 cscope,方便快捷地浏览源代码。
Cscope是一个类似ctags的工具。你可以把它想作是超过频的ctags,因为它功能比ctags强大很多。在 Vim里,通过cscope查询结果来跳转就象跳转到其他的标签完全一样;它被保存在标签栈里。这样你就可以象使用tags一样在函数等等之间便捷的跳转。在VIM中使用cscope非常简单,首先调用“cscopeadd”命令添加一个cscope数据库,然后就可以调用“cscopefind”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:csfindc work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:csfind swork”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。
1、安装cscope
在http://sourceforge.net/projects/cscope/files/下载cscope-15.8a.tar.gz
./configure --with-flex (注:如果平台是Linux,最好带上 --with-flex选项)
make (注:我没有遇到错误)
make install (注: 直接安装好了)
2、配置cscope
vim 配置文件 vimrc. 你可以修改/etc/vimrc使用所有用户都使用本配置文件,当然你还可以修改~/.vimrc 下载配置文件:cscope_map.vim 把cscope_map.vim里从 if has("cscope") 到 endif里边的内容复制到/etc/vimrc里边去里边的命令意思请看下边文章:
http://blog.csdn.net/longerzone/article/details/7789581
3、Cscope 使用
3.1、建立cscope使用的索引文件
在你需要浏览源码的根目录下(如你想用cscope看linux源码)使用下面命令:
#: cscope-Rbkq<回车>
R 表示把所有子目录里的文件也建立索引
b 表示cscope不启动自带的用户界面,而仅仅建立符号数据库
q 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
k 在生成索引文件时,不搜索/usr/include目录
3.2、使用cs find 查找[3](也可以简化写成 cs f)后面添加需要得字符串类型:
c:Findfunctions calling this function//查找调用本函数的函数
d:Findfunctions called by this function //查找本函数调用的函数
e:Find thisegrep pattern//查找egrep模式,相当于egrep功能,但查找速度快多了
f:Find thisfile //查找并打开文件,类似vim的find功能
g:Find thisdefinition//查找函数、宏、枚举等定义的位置,类似ctags的功能
i:Find files#including this file //查找包含本文件的文件
s:Find thisC symbol //查找C语言符号,即查找函数名、宏、枚举值等出现的地方
t:Findassignments to //查找指定的字符串
例如:使用cscope查找do_fork函数的定义,在vim命令行下执行 :cs f gdo_fork,上面所有命令也可以配合按键及来实现;
Ctrl+ \ + s 表示 :cs find s命令
同样ctrl + \ + g,d,c,t,e,f,i表示 cs find +g,d,c,t,e,f,i命令
Cscope_map.vim说明:有英文注释的我就不说明了,我就说一下里边的键 map 映射
如: nmap<C-\>s :cs find s<C-R>=expand("<cword>")<CR><CR>
nmap 表示在vim的普通模式下,即相对于:编辑模块和可视模式,以下是几种模式
:map 普通,可视模式及操作符等待模式
:vmap 可视模式
: omap 操作符等待模式
:map! 插入和命令行模式
:imap 插入模式
:cmap 命令行模式
<C-\>表示:Ctrl+\ s表示输入(即按:s) s
表示输入':'
“cs finds"表示输入"csfind s"也即是要输入的命令
<C-R>=expand("cword")总体是为了得到:光标下的变量或函数。cword 表示:cursor word, 类似的还有:cfile表示光标所在处的文件名吧。
至于回车吧,不太清楚
②cscope应用参考:http://blog.csdn.net/longerzone/article/details/7788010
http://kb.microembedded.com/cscope - KnowledgeME Cscope
三、vim-config应用
1、下载vim-config.tar.bz2
http://amstradstuff.online.fr/GNUstep/vim-config.tar.bz2
直接解压到主目录下面即可[如果有条件的话,直接用郭工的,里面包括c-support]。
2、一些应用介绍
(1) 在编辑C文件的时候
会自动出现一些文件信息格式
[20:57 @ ~ ]$ vim test.c
test.c
/*********************************************************************************
* Copyright: (C) 2012 ieczw<ieczw@qq.com>
* All rights reserved.
*
* Filename: test.c
* Description: This file
*
* Version: 1.0.0(12/15/2012~)
* Author: ieczw <ieczw@qq.com>
* ChangeLog: 1, Release initial version on"12/15/2012 05:47:59 PM"
*
********************************************************************************/
如果你想要把那些名字修改成你自己的怎么办?
下面就开始来进行修改:
[21:00 @ ~ ]$ find .vim -iname "*" | xargs grepieczw[用法例子看③]
.vim/c-support/templates/Templates:|AUTHOR| = ieczw
.vim/c-support/templates/Templates:|EMAIL| = ieczw@qq.com
.vim/c-support/templates/c.comments.template: * Copyright: (C) |YEAR| ieczw<ieczw@qq.com>
.vim/c-support/templates/c.comments.template: * Copyright: (C) |YEAR| ieczw<ieczw@qq.com>
[21:00 @ ~ ]$ vim .vim/c-support/templates/Templates
[然后按ESC键,执行下面命令]
:g/czw/s//ieczw/g
同样打开.vim/c-support/templates/c.comments.template执行同样的操作。
然后都成你的了。这时候你再用vim新建一个C文件,就可以有你自己的配置了。
③find&grep应用:find ./ -iname “*.c” | xargs grep “xxx”
四、vim的一些高级应用
[郭工配置的.vimrc更强大,这里我就说下他的vimrc的一些用法]
这里还以上面的test.c为例,打开test.c
1、一些例子
(1)、快速依次按 \ + i + m
/********************************************************************************
* Description:
* Input Args:
* Output Args:
* Return Value:
********************************************************************************/
int main (int argc, char **argv)
{
return 0;
} /* ----- End of main() ----- */
这样很方便可以快速插入函数,也方便我们对函数的注释。
还有更为灵活的用法:
(2)、快速依次按\ + i + f
然后命令栏出现:FUNCTION_NAME :
然后在后面输入函数名:test 回车
/**************************************************************************************
* Description:
* Input Args:
* Output Args:
* Return Value:
*************************************************************************************/
int test ()
{
return 0;
} /* ----- End of test() ----- */
2、函数全局查看及跳转
如何在vim下实现函数目录的查看和跳转呢?
除了ctags之外,还有vim自带的一些功能。
按下 F4 功能键左边出现全局目录(图一):
按下 ctrl + w + w 光标由当前位置跳转到另一侧相应的位置。
然后可以上下移动光标还选中你要看的函数或者变量,定义之累的东西,全ENTER键跳转到该函数或变量,定义。
当然这个只能看单个文件,如果想看多个文件,就用ctags;有时候把ctags和这个方法加起来一起用,效果会更好。
|
3、.vimrc的快捷功能的添加和修改
切换到自己的主目录下,打开.vimrc
就比如刚F4的快捷键:
"My(guowenxue)map setting
map<F12> :q!<CR>
map<F11> :wq<CR>
map<F4> :Tlist<CR>
这里你可以吧F4 换成F5
也可添加:
map<F5> :set nu<CR>
等等。
3、Vim的其他一些常用按键
在vim 下
gg 跳转到首行
GG 跳转到末行
yy 复制 [3yy 复制当前行往下的三行包括本行 ]
p 粘贴复制的信息到当前行
0 跳转到行首
Shift +3 选择所有该字符串,并且n向上移动,N向下移动;
复制部分内容:
(1)、按下v ;
(2)、移动光标选中要复制的内容;
(3)、按下y键,复制;
(4)、移动光标到指定位置,按p键,粘贴;
注:由于本人能力有限,就说这一点点功能,希望大家多多指教,帮我完善。
联系方式 QQ:623799215
E-mail:ieczw@qq.com