vi ctags cscope

news/2024/7/21 15:01:18 标签: makefile, tags, vim, ext
 

内核原代码的Makefile就包含了make tags/TAGS的选项,
但是生成的tags太大,因为包含了drivers等不常用的目录。

因此参照内核的Makefile文件,写了一个Makefile,
用来生成ctags/cscope/etags

这样,可以根据自己的需要,删除和添加目录。

我以前没有用过tags/cscope,不知道有没有更好的方法。欢迎指教。
也请大家补充tags/cscope的常用的和好用的命令,技巧。

一、用法

找一个空目录,把附件Makefile拷贝进去。
然后在该目录中选择性地运行如下make命令:

注:SRCDIR用来指定内核源代码目录,如果没有指定,
则缺省为/usr/src/linux/,如

$ make

将处理/usr/src/linux下的源文件,在当前目录生成ctags, cscope


1) 只创建ctags

$ make SRCDIR=/usr/src/linux-2.6.12/ tags

2) 只创建cscope

$ make SRCDIR=/usr/src/linux-2.6.12/ cscope

3) 创建ctags和cscope

$ make SRCDIR=/usr/src/linux-2.6.12/

4) 只创建etags

$ make SRCDIR=/usr/src/linux-2.6.12/ TAGS


二、处理时包括的内核源文件:

1) 不包括drivers,sound目录
2) 不包括无关的体系结构目录
3) fs目录只包括顶层目录和ext2,proc目录

对2.6.12.1内核,这样生成的tags大约12M,cscopes大约19M

三、最简单的ctags命令

----------------------
1) 进入

进入vim后,用

:tag func_name

跳到函数func_name

----------------------
2) 看函数(identifier)

想进入光标所在的函数,用

CTRL + ]

----------------------
3) 回退

回退用

CTRL + T

查找标识符

:tag write_<TAB>

找到以write_开头的标识符,如果有多个,继续按<TAB>,直到找到想要的。


如果想跳到包含block的标识符

:tag /block

然后用<TAB>来选择。

这里'/'就是告诉vim'block'是一个pattern。

如果想在以write_开头的标识符中选择一下,

:tselect /^write_

这里,'^'表示开头,同理,'$'表示末尾。
多个同名的标识符

如果某个函数有多个定义,':tag'命令会跳到第一个,如果当前文件有,则优先用这个。
然后可以跳到下一个同名的
:tnext

跳到第一个
:tfirst

跳到前count个
:[count]tprevious

跳到后count个
:[count]tnext

跳到最后一个
:tlast


你也可以在所有tagname中选择:
:tselect tagname

http://www.niftyadmin.cn/n/841553.html

相关文章

Vue -- Mixin

mixins mixin: 有两个非常相似的组件&#xff0c;他们的基本功能是一样的&#xff0c;可以局注册一个混合&#xff0c;影响注册之后 所有创建的每个 Vue 实例&#xff0c;这就是mixin。 Mixin对编写函数式风格的代码很有用&#xff0c;一般情况下不会改变函数作用域外部的任何东…

VS2008 Web Application和Web Site的区别[转]

MSDN 原文&#xff08;英文&#xff09;地址&#xff1a;http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx 以下是主要内容的中文翻译&#xff1a; Visual Studio 2008 中 Web Application [ Asp.net web应用程序 项目 ] 和 Web Site Projects [ 网站项目 ] 的…

第2章 爬虫简介以及爬虫的技术价值...

1.爬虫简介爬虫&#xff1a;一段自动抓取互联网信息的程序多个URL构成互联网&#xff0c;人工获取url&#xff0c;爬虫获取url&#xff0c;在网页上获取有价值的数据2.爬虫技术价值价值&#xff1a;互联网数据&#xff0c;为我所用&#xff01;爬取数据&#xff0c;分析数据互联…

Linux2.4.18内核下的系统调用劫持 [转]

注&#xff1a;本文提到的方法和技巧&#xff0c;如有兴趣请参考后面提到的两篇参考文章&#xff0c;虽然比较老了&#xff0c;但是对于本文内容的实现有很大的参考价值。因为篇幅关系&#xff0c;没有列出完整代码&#xff0c;但是核心代码已经全部给出。 Linux 现在使用是越来…

源码编译构建JSVC执行程序

从apache下载 commons-daemon的源代码&#xff0c;配置JAVA_HOME环境变量。 1. 首先安装编译环境的依赖&#xff1a; autoconf gcc make jdk 2. 进入源代码目录&#xff1a;/path/to/commons-daemon-src/src/native/unix 3. 执行如下命令&#xff1a; sh support/buildconf…

SQL数据库查询实现行转列与列转行结果SQL语句(适用于SqlServer数据库,oracle需要修改case when语句)

文章来源&#xff1a;http://blog.csdn.net/zhangshengboy/article/details/6431724行转列&#xff0c;列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现&#xff0c;也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。 用传统的方法&#xff…

spinlock的设计和实现

http://www.linuxforum.net/forum/gshowflat.php?Cat&BoardlinuxK&Number263448&page4&viewcollapsed&sb5&oall&fpart 在Linux的内核中&#xff0c;spin lock用在多处理器环境中。当一个CPU访问一个临界资源 (critical section)的时候&#x…

UVA10129 POJ1386 HDU1116 ZOJ2016 Play on Words【欧拉回路+并查集】

问题链接&#xff1a;UVA10129 POJ1386 HDU1116 ZOJ2016 Play on Words。 问题简述&#xff1a;先输入测试用例数T&#xff0c;每个测试用例包括整数N和N个单词数&#xff0c;问这些单词首尾字母能否接成一条龙&#xff1f; 问题分析&#xff1a;这是一个单词接龙问题&#xff…