vi+ctags+cscope联合使用
2017-07-24 11:47
246 查看
联合脚本:
#! /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: 跳至当前光标所在的变量声明处
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:删除块
~:切换块中内容的大小写
#! /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: 跳至当前光标所在的变量声明处
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:删除块
~:切换块中内容的大小写
相关文章推荐
- 在window7下使用vi + ctags + cscope + taglist
- 使用vim+ctags+cscope阅读内核源码
- 使用Vim+Ctags+Cscope阅读源代码
- VI+Cscope+Ctags快速上手
- vim + ctags + taglist配置和使用 【及】 一键安装 ctags和cscope的方法 【及】vim语法高亮,自动缩进,python 自动缩进设置
- vi/Vim + Cscope/Ctags
- vi+ctags使用方法教程
- ubuntu vi ctags cscope
- 使用 vim + ctags + cscope + taglist 阅读源码 - bo博的个人空间 - 开源中国社区
- vim: ctags cscope taglist使用快速掌握
- vi/vim使用进阶: 程序员的利器 – cscope
- cscope和ctags配合vi阅读源码
- cscope、ctags和vim简明使用流程
- 使用vim + cscope/ctags
- vim ctags cscope的配合使用阅读源码
- fedora 22 : Vim & cscope & ctags 简易使用
- Ctags+VI的使用方法
- Ctags+VI的使用方法
- 使用Vim+Ctags+Cscope阅读源代码
- 通用的使用 VIM Ctags Cscope 访问程序文件的方法