vi+ctags+cscope联合使用

联合脚本:

#! /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:删除块
~:切换块中内容的大小写





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值