您的位置:首页 > 运维架构

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:删除块

~:切换块中内容的大小写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: