联合脚本:

#! /bin/sh -

find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.S" > cscope.files
cscope -bkq -i cscope.files

ctags -R

各个说明

**************************************************************************

**************************** ctags ***************************************
**************************************************************************
1、生成tags
ctags -R 生成当前目录包括子目录程序的tags
ctags * 只生成当前目录下程序的tags
tags包括如下内容:
#define定义的宏
枚举型变量的值
函数的定义,原型和声明
名字空间
类型定义
变量
类,结构,枚举,联合
类,结构和联合中成员变量或函数

2、vim利用tags定位对象
(1)vi -t <对象>
(2)在vi编辑器内使用:ta命令 e.g: ta <对象>
(3)光标移到变量名或函数名上,按下“ctrl-]”, "ctrl-o"退回原来地方。
运行vim的时候,必须在tags文件所在的目录下运行,否则运行vim时,:set tags=tags文件路径

3、在函数中移动光标
[{: 转到该代码段匹配的 "{"
]}: 转到该代码段匹配的 “}”
[[: 向上跳转到上一个函数的 "{"
]]: 向下跳转到下一个函数的 "{"
[]: 向上跳转到上一个函数的 "}"
][: 向下跳转到下一个函数的 "}"
[(: 转到当前位置匹配的 "("
]): 转到当前位置匹配的 ")"
[#: 跳转到最近的#if or #ifdef等
]#: 跳转到最近的#else or #endif等
[/: 跳转到注释的开始
]/: 跳转到注释的结束
{ : 转到上一个空行
} :转到下一个空行
gd: 转到当前光标所指的局部变量定义,并高亮显示
gD:  查询变量,只在本文件中
* :转到当前光标所指的单词下一次出现的地方,类似查找后的 n(next)
# : 转到当前光标所指的单词上一次出现的地方,类似查找后的N(next)

4、tags命令显示经过的标签列表
:tags
ctrl-]: 沿着调用树向前跳转,变量定义的地方
ctrl-t: 向回跳

5、分割窗口
:stag <tagname> 或者 ctrl-w]
:split/vsplit <filename>

6、一个函数多处定义,多个匹配
:ts(tselect) <tagname> 展示匹配列表
:tn(tnext) 跳转到同一个标签其他匹配处
:tf(tfirst) 到第一个匹配
:[count]tprevious 向前[count]个匹配
:[count]tnext 向后[count]个匹配
:tl(tlast) 到最后一个匹配

7、查找标签名
:tag <tagname> 找到完整匹配的
:tag </tagname> 找到tag中包含tagname的部分
:tag </^tagname> 找到tag中以tagname开头的部分
:tag </tagname$> 找到以tagname结尾的部分

8、预览窗口
查看函数,变量等原型
:ptag <tagname> :在原来位置继续输入而不必使用ctrl-w命令
:pclose 关闭预览窗口
:pedit <filename> 编译一个指定的文件
:psearch <tagname> 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配

9、增加目录
通过增加目录来修改无法找到文件的错误
:set path+=<路径>
例如:
:set path+=/usr/local/include
增加一个目录
:set path+=/usr/*/include
增加多个目录:/usr/local/include, /usr/x11/include
:set path+=/usr/**/include
增加多个目录(递归包括子目录):/usr/local/include /usr/local/main/include ..

***************************************************************************
********************************** cscope *********************************
***************************************************************************
1、为代码生成一个cscope数据库
cscope -Rbq
or
find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope -Rbq
or
find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.S" > cscope.files 
cscope -bkq -i cscope.files 
参数意义
-b: 只生成索引文件,不进入cscope
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope找源文件列表
-I: 在-I选项指出目录中查找文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上path

2、在vim中使用cscope
在vim下cscope命令:
add: add a new databasse Usage:add file|dir
find: query for a pattern Usage:find c|d|e|f|g|i|s|t name
help: show this mesage
kill: kill a connection Usage: kill #
reset: Reinit all connections Usage: reset
show: show connections Usage: show

find命令子参数
1/s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
2/g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
3/d: 查找本函数调用的函数
4/c: 查找调用本函数的<textarea></textarea>函数
5/t: 查找指定的字符串
6/f: 查找并打开文件,类似vim的find功能
7/e: 查找egrep模式
8/i: 查找包含本文件的文件
9: 指定引用头文件进行查找

3、vim中cscope的使用
:cs add /路径/cscope.out 或者 cs add cscope.out(当前目录)
:cs s(cs show)
:cs f c <func> 函数调用关系(:cw可以显示全部)
:cs f g <func> 查找函数,宏,枚举定义位置
:cs f t <func>  查找字符串
:cs f s <func>  查找C语言符号

4、生成目录
Tlist: 生成目录,按回车即可到定义函数处

***************************************************************************
********************************** vim ************************************
***************************************************************************
1、批量处理文件(在vim中使用宏)
normal模式:
q<x>: 开始记录宏,并将结果存入寄存器<x>
q: 退出记录模式
@<x>:播放记录在x寄存器中的宏命令

2、窗口命令
:split <filename>:水平分割窗口,将filename加载到新的窗口中
:vsplit <filename>:垂直分割窗口,将filename加载到新的窗口中
ctrl +w v:垂直分割窗口

3、编辑器命令
:w :将缓冲区写入文件,即保存
:wq :保存并退出
:x  : 保存修改并退出
:q  :退出
:q! : 强制退出,放弃修改

4、查找命令
/<pattern> :向后搜索字符串
?<pattern> : 向前搜索字符串
/\<pattern : 匹配开头
/pattern\> : 匹配结尾
/\<pattern\> : 匹配完整字
/^pattern : 匹配一行开头
/pattern$ : 匹配一行结尾
n : 下一个匹配
N : 上一个匹配
:%s/old/new/g : 搜索整个文件,将所有old替换为new
:%s/old/new/gc : 搜索整个文件,将所有old替换为new,每次都需要确认

5、复制粘贴
<n>dd: 删除光标所在行
<n>dw: 删除光标所在字
<n>x: 删除光标所在字符
<n>D:删除光标所在位置到行末
<n>yy: 复制光标所在一行
<n>yw: 复制光标所在字
<n>y$: 复制光标到行末
p: 粘贴内容到当前行下面

6、移动光标
h,j,k,l:左,上,下,右
ctrl-f: 向下翻一页
ctrl-b: 向上翻一页
%: 跳到与当前[{(相匹配的地方
w: 跳到下一个字首
e: 跳到下一个字尾
b: 跳到上一个字
0:跳至行首
^: 跳至行首第一个字符
$: 跳至行尾
gg: 跳至文件第一行
gd: 跳至当前光标所在的变量声明处
[n]G: 跳到第n行
f<x>: 在当前行中找x字符,找到了跳转至
F<x>:同f<x>相反的方向
*: 查找光标所在单词
`.: 跳转至上次编辑的位置

7、在屏幕上移动
H: 移动光标到当前屏幕最上边一行
M: 移动光标到当前屏幕中间一行
L: 移动光标到当前屏幕最下边一行

8、编辑
r: 替换一个字符
cc: 删除当前行并进入编辑模式
cw: 删除当前字并进入编辑模式
c$: 删除当前位置至行末并进入编辑模式
s:删除当前字符并进入编辑模式
xp:交换当前字符和下一个字符
u:撤销
ctrl-r:重做
.:重复上一个编辑命令
~:切换大小写
>>:将当前右移一个单位(tab符)
<<: 将当前左移一个单位(tab符)
==:自动缩进当前行

9、插入模式
i:从当前光标进入插入模式
a:追加模式,置于当前光标之后
o:当前行新加一行

10、可视模式
v:进入可视模式,单字符模式
V:进入可视模式,行模式
ctrl-v:进入可视模式,列模式
o: 跳转光标到选中块的另一个端点
对标记进行动作:
>:块右移
<:块左移
y:复制块
d:删除块
~:切换块中内容的大小写

vi+ctags+cscope联合使用相关推荐

  1. vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight

    听说vi很强大?是的,最近笔者需要在Linux下编写一些C代码和查看一些C源码,但是默认的vi并不支持函数之间的跳转.查看函数的定义等等,所以笔者就将vi打造成了一个ide(可以勉强称得上吧).首先我 ...

  2. ctags,cscope,nerdtree,tmux 笔记

    打造一个基础的VIMer需要配备的环境,开不开ctags, cscope(需求不大的时候也可以忽略), nerdtree,tmux.下面整理一下我的配置过程,以备不时之需. ctags相关 首先肯定是 ...

  3. linux vim ctags,Linux环境上代码阅读与编写的利器-vim+ctags+cscope

    Linux环境下代码阅读与编写的利器----vim+ctags+cscope 所谓工欲善其事,必先利其器. 从事Linux程序开发,特别是Linux驱动程序的开发,不管是通过windows下虚拟一个L ...

  4. Windows10下用vim+ctags+cscope搭建属于自己的IDE

    工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.估计大家经常用的IDE工具如SourceInsight,Notepad++,VScode等等.SourceInsight属于收费软件,其 ...

  5. 使用Vim+Ctags+Cscope阅读源代码

    2019独角兽企业重金招聘Python工程师标准>>> 因为所有设计思想.内部机制都是 以代码的形式实现,所有的资料也都是为了更好的诠释代码.那么一个好的阅读工具,能 够提高阅读的效 ...

  6. Linux 内核阅读工具vim+ctags+cscope+taglist

    今天,来介绍一下vim+ctags+cscope+taglist的内核阅读配置.当使用过之后,我相信大部分人都会舍弃之前的Eclipse(我就是活生生的一个例子).我们先来看看实现的界面是怎么样的: ...

  7. 配置vim支持源码浏览(vim+ctags+cscope)

    2019独角兽企业重金招聘Python工程师标准>>> 配置vim支持源码浏览(vim+ctags+cscope) 介绍 windows下流行的源码阅读软件是source insig ...

  8. Sublime Text + CTags + Cscope (部分替代Source Insight)

    CTags & cscope 下载: CTags+Cscope --- 我的百度云盘下载 http://pan.baidu.com/s/1gfyPnuN ctags58.zip --- src ...

  9. vim cscope php,使用Vim+Ctags+Cscope阅读源代码

    因为所有设计思想.内部机制都是 以代码的形式实现,所有的资料也都是为了更好的诠释代码.那么一个好的阅读工具,能 够提高阅读的效率和效果. • "Cscope"[4]为终端下的代码阅 ...

  10. Vim+ctags+cscope+Nerdtree+Taglist入门

    介于linux下并没有什么像Source Insight这样优秀的内核源码阅读工具,只有一些模仿的都不伦不类,所以我用打造vim为一个合格的源码阅读器,看着贼爽. 可能一下子看起来那么多东西可能怕怕的 ...

最新文章

  1. mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程
  2. mac 终端里进入mysql和退出
  3. opengl加载显示3D模型3d类型文件
  4. 深入分析事务的隔离级别
  5. 支付功能如何软件测试
  6. 微信读书vscode插件_众所周知,拥有了vscode就拥有了一切
  7. java6_64.tar配置,Ubuntu 下Java-JDK6的安装与环境配置
  8. twr java_Java7新特性 - TWR(try-with-resources)
  9. 【微信公众号开发解决URL接口配置问题 】
  10. git提交失败running pre-commit hook: lint-staged [33m‼ Some of your tasks use `git add` command
  11. c 是高级程序设计语言吗,C语言是一种高级程序设计语言。
  12. 我是马云:新入职员工勿批判公司
  13. chrome android远程调试工作原理
  14. 铜护套氧化镁矿物质绝缘电缆
  15. 在线网络考试系统源码
  16. 海尔简爱s11装Linux,海尔简爱S11笔记本U盘安装win7系统的操作教程
  17. 1024 程序员节技术英雄会鸣锣开场,问道中国技术新生态
  18. 显示12306服务器处理中正在排队,12306一直在排队中怎么办
  19. Eric6的安装与基本设置
  20. informix 外部表

热门文章

  1. FTOUR2 - Free tour II
  2. Spring使用经验之Listener综述
  3. mongodb 日志,(一个看日志解决新问题的方法) -- clwu
  4. 成为java高手的八大条件
  5. poj 2406 Power Strings(KMP)
  6. Ubuntu 8.04和Windows Server 2008 双体系的安置与卸载记
  7. storm1.x支持主节点nimbus高可用 多master集群部署
  8. 一行代码迁移TensorFlow 1.x到TensorFlow 2.0
  9. 泛微发布亿元补贴计划,推动移动办公普及
  10. 国网四川电力应用大数据服务经济社会发展