Linux 下阅读源码工具(Vim + ctags+Cscope)

0. 写在前面的废话

开发环境迁移到了Ubuntu下,所有windows下好用的工具都要找个替代品。

windows下一直用 souce Insight 来阅读源码,需要在Ubuntu下找个替代品。

上网看了看,貌似Vim + Ctags + Cscope不错,安装来试试 o(∩∩)o

 

1. 安装

在我用的ubuntu中,这三个软件都不是自带的,需要手动安装,很简单用apt-get命令安装就好了

$ sudo apt-get install vim

$ sudo apt-get install ctags

$ sudo apt-get install cscope

如下图:

Linux 下阅读源码工具(Vim + ctags+Cscope)_第1张图片

Linux 下阅读源码工具(Vim + ctags+Cscope)_第2张图片

 

2. 使用

2.1 建立索引

在能自由搜索之前,需要在你想要查看源码的根目录下建立索引,也就是执行两条命令:

$ ctags -R

$ cscope-indexer -r

Linux 下阅读源码工具(Vim + ctags+Cscope)_第3张图片

2.2 在vim 中使用ctag

1) 跳转到指定的函数进入vim后,用 “:tag func_name“ 跳到函数func_name处。使用tag
命令时,可以使用TAB键进行匹配查找,继续按TAB键向下切换。
某个函数有多个定义时
:tag
跳到第一个定义处,优先跳转到当前文件
:tnext
跳到第一个
:tfirst
跳到前count个
:[count]tprevious
跳到后count个
:[count]tnext
跳到最后一个
:tlast
你也可以在所有tagname中选择:
:tselect tagname

如果想跳到包含block的标识符:“tag /block” 然后用TAB键来选择。这里'/'就是告诉vim
'block'是一个语句块标签。
2)用“CTRL + ]“快捷键,跳转到光标所在函数标识符的定义处。
3)使用“CTRL + T”退回上层。如果想在以write_开头的标识符中选择一下, :tselect /^
write_ 这里,'^'表示开头,同理,'$'表示末尾。多个同名的标识符

2.3 在vim中使用csope

好吧,貌似应该叫在csope中使用vim,前提条件还是要先建立索引(cscope-indexer -r),然后在源码根目录执行csope命令

$ csope   ,效果如下图

Linux 下阅读源码工具(Vim + ctags+Cscope)_第4张图片

若干种查找方式,随便输入点查找内容,如i2c,按回车键,效果如下:

选择想要打开的文件,输入前面序号即可在vim中打开它,之后就可以在vim中使用ctags快速的在函数间跳来跳去的了^_^

 上图中 cscope 两面板切换: tab

cscope退出: ctrl + d



//====================================================

补充如下操作,

全局变量或者函数
1)将光标停留在一个函数或变量上,"ctrl+]",将直接跳转到定义该函数的地方。

2)局部变量跳转
按gd 跳转到定义出
ctrl+o 返回跳转前的位置


3)有的时候 用vim 编辑文件, 不小心按了 ctrl+z, 也就是调试到后台工作, 这时候要再切换回去 

可以这样操作 :
直接输入fg . 就可以切换回去..

4) vim显示行号:

     第一种是,手动显示:在vim命令行模式下输入  :set nu

      取消显示:在vim命令行模式下输入:  set nonu

      第二种是,永久自动显示:我们修改一个配置文件。

      找到.vimrc文件,在最后增加      set nu即可


5) ViM界面执行Shell命令 方法

  

vim中执行shell命令,有以下几种形式

  1):!command

  不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容

  例如

  :!ls -l

  特别的可以运行:!bash来启动一个bash shell并执行命令,不需要退出vim

  2):r !command

  将shell命令command的结果插入到当前行的下一行

  例如

  :r !date,读取系统时间并插入到当前行的下一行。

  3):起始行号,结束行号 !command

  将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容

  例如

  :62,72 !sort,将62行到72行的内容进行排序

  可以只指定起始行,例如:62 !tr [a-z] [A-Z],将62行的小写字母转为大写字母

  当前光标所在行,除可以指定行号外,也可以用.表示,例如:. !tr [a-z] [A-Z],将当前行的小写转为大写

  4):起始行号,结束行号 w !command

  将起始行号和结束行号所指定的范围的内容作为命令command的输入。不会改变当前编辑的文件的内容

  例如

  :62,72 w !sort,将62行到72行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示在vim敲命令的区域

  特殊的可以下面这么用

  :62 w !bash,将会把第62行的内容作为bash命令来执行并显示结果,而且不会改变当前编辑的文件的内容

  同样的:. w !bash,将当前行的内容作为bash命令来执行

  例如52行内容为ls -l

  那么输入:52 w !bash就跟执行!ls -l是一样的效果,如果你用的shell是bash shell

  如果输入的是:52 !bash,那么会把第52行的内容也就是ls -l作为命令执行,同时命令的输出结果会替换第52行的内容,注意其中的区别。


6)Vim 中文乱码问题

 需要修改vim的配置,可以修改/etc/vim/vimrc,也可以修改~/.vimrc,加入如下内容:

  1. set fencs=utf-8,GB18030,ucs-bom,default,latin1
  2. 注意,对vimrc文件的修改,当修改/etc/vim/vimrc文件是对所有用户有效,修改~/.vimrc只对当前用户有效

7)

在vi的编辑模式下通过Ctrl+n,ctrl+p,可以实现单词(给查单词的部分字符)的自动补全和输入提示的功能。

8) vi 历史命令

q: 进入命令历史编辑。
类似的还有 q/ 可以进入搜索历史编辑。
注意 q 后面如果跟随其它字母,是进入命令记录。

可以像编辑缓冲区一样编辑某个命令,然后回车执行。
也可以用 ctrl-c 退出历史编辑,但此时历史编辑窗口不关闭,可以参照之前的命令再自己输入。
用 :x 关闭历史编辑并放弃编辑结果,也可以在空命令上回车相当于退出。
 
  
 
  
8)Vim中一般模式下输入shift+# 能够实现快速查找

你可能感兴趣的:(Linux学习,Vim)