flyonok

统计

留言簿(7)

ACE

book

boost

bsd

c study

c++

code download

codeblock

computer clound

Eclipse

embed system

erlang

ET++

gtk

ic card

java

KDE

libevent

linux

linux--MM

mysql

network education

one card

oracle

pcap relation

php

powerbuilder

python

QT

software config

software test

SQL server

UML

wireless

wxwidgets

陈宾

阅读排行榜

评论排行榜

vim ctags cscope的配合使用阅读源码

安装:apt-get install vim    
2.1
基本设置
    * set nocp
     
该命令指定让 VIM 工作在不兼容模式下。
     
VIM 里可以使用 u 命令撤消多步操作, “重复”使用的快捷键是 Ctrl + R
      
只有在不兼容模式下, 才能更好地发挥 VIM 自身的特点。 Bram 爷爷强烈推荐大家使用 VIM 的不兼容模式, 滇狐也是这样推荐的。 请务必在你的 .vimrc 中的第一行写上: “set nocp”
    * set ru
     
该命令打开 VIM 的状态栏标尺。 打开标尺可以给文件的编辑工作带来一定方便。
    * set is
     
搜索时在未完全输入完毕要检索的文本时就开始检索。
    * syntax on
     
打开关键字上色。
    * set backspace=indent,eol,start
     
设想这样一个情况: 当前光标前面有若干字母, 我们按下 i 键进入了 Insert 模式, 然后输入了 3 个字母, 再按 5 下删除(Backspace)。 默认情况下, VIM 仅能删除我们新输入的 3 个字母, 然后喇叭“嘟嘟”响两声。 如果我们“set backspace=start”, 则可以在删除了新输入的 3 个字母之后, 继续向前删除原有的两个字符。
     
再设想一个情况:有若干行文字, 我们把光标移到中间某一行的行首, 按 i 键进入 Insert 模式, 然后按一下 Backspace。默认情况下,喇叭会“嘟”一声, 然后没有任何动静。 如果我们“set backspace=eol”, 则可以删除前一行行末的回车,也就是说将两行拼接起来。
     
当我们设置了自动缩进后, 如果前一行缩进了一定距离, 按下回车后,下一行也会保持相同的缩进。 默认情况下, 我们不能在 Insert 模式下直接按 Backspace 删除行首的缩进。 如果我们“set backspace=indent”, 则可以开启这一项功能。
     
上述三项功能, 你可以根据自己的需要, 选择其中一种或几种, 用逗号分隔各个选项。 建议把这三个选项都选上。
    * set whichwrap=b,s,<,>,[,]
     
默认情况下, 在 VIM 中当光标移到一行最左边的时候, 我们继续按左键, 光标不能回到上一行的最右边。 同样地,光标到了一行最右边的时候,我们不能通过继续按右跳到下一行的最左边。 但是, 通过设置 whichwrap 我们可以对一部分按键开启这项功能。
   
2 .2
文本编辑设置

    * set sw=4
     
自动缩进的时候, 缩进尺寸为 4 个空格。
    * set ts=4
      Tab
宽度为 4 个字符。
   
2.3
断行设置

    * set lbr
     
不在单词中间断行。 设置了这个选项后, 如果一行文字非常长, 无法在一行内显示完的话, 它会在单词与单词间的空白处断开, 尽量不会把一个单词分成两截放在两个不同的行里。
  
2.4 C/C++
编码设置
    * set sm
     
显示括号配对情况。 打开这个选项后, 当输入后括号 (包括小括号、中括号、大括号) 的时候, 光标会跳回前括号片刻, 然后跳回来, 以此显示括号的配对情况。
    * set cin
     
打开 C/C++ 风格的自动缩进。 打开了自动缩进后, 在编码的时候我们可以使用“V”命令选中一段文本后, 按“=”将这段文本重新调整缩进格式, 在一定程度上起到代码美化的作用。
    
在粘贴的时候把所有自动缩进都关闭, 粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐, vim 为我们提供了一个很好用的命令,只要输入“:set paste”, 就可以关闭所有自动缩进。 粘贴完毕后再输入“:set nopaste”就可以重新打开原有的自动缩进设置了。
    * set cino=:0g0t0(sus
     
设定 C/C++ 风格自动缩进的选项,
  * set ai
     
打开普通文件类型的自动缩进。 该自动缩进不如 cindent 智能, 但它可以为你编辑非 C/C++ 文件提供一定帮助。

2.5
其它设置

    * set selectmode=
     
不使用 selectmode
    * set mousemodel=popup
     
当右键单击窗口的时候, 弹出快捷菜单。
    * set keymodel=
不使用“Shift + 方向键”选择文本, “Shift + 方向键”代表向指定方向跳一个单词。 如果你喜欢这项功能的话, 可以使用“set keymodel=startsel,stopsel”打开它。
* set selection=inclusive
指定在选择文本时, 光标所在位置也属于被选中的范围。 如果指定 selection=exclusive 的话, 可能会出现某些文本无法被选中的情况。



2 评论 | 0 引用

评论

  1. 北京臻何沃达机械设备有限公司专业经营NADELLA品牌,主要产品包括:NADELLA直线导轨,NADELLA线性模块,NADELLA滚针轴承,NADELLA万向接头,NADELLA操纵杆,NADELLA调节环,NADELLA杆头.北京臻何轴承销售有限公司是NADELLA轴承在中国华北地区一级经销商,并与欧洲Nadella工厂库存实施共享,及时通过国际物流空运至国内,确保客户在第一时间拿到所需的产品. 电话:010-51288604 传真:010-51288592 网址:www.bjnadella.com

    作者 www.bjnadella.com — 21 三月 2011, 04:38

  2. 每次都要一条一条复制好麻烦,直接写一个常用,以后配置直接添加就可以了,不要把syntax on前面的"注视掉。

    set ignorecase " Do case insensitive matching
    "set smartcase " Do smart case matching
    "set incsearch " Incremental search
    "set autowrite " Automatically save before commands like :next and :make
    "set hidden " Hide buffers when they are abandoned
    set mouse=a " Enable mouse usage (all modes)
    set nu
    set encoding=utf-8
    set fileencoding=chinese
    set fileencodings=ucs-bom,utf-8,chinese
    set ambiwidth=double
    set nocp
    set ru
    set is
    set backspace=indent,eol,start
    set whichwrap=b,s,,[,]
    set sw=4
    set ts=4
    set lbr
    set sm
    set cin
    set cino=:0g0t0(sus
    set ai
    set mousemodel=popup

在阅读源码的时候一个好的工具能使效率提高很多。在这,关于工具我就不多说了,vim+ctags+cscope,我这里主要想介绍一下,这个组合 工具的一些使用技巧,这里有从网上找到了(在此,谢谢那些前辈们的辛劳),也有自己积累的,总之,记录下来吧。

cscope的工作需要 vim、ctags的配合,它们都是基于命令行的。
下面只是给出了三种工具的常用方法,更多功能可查看man手册,或者官方文档。

一、Vim
参考:http://oss.lzu.edu.cn/modules/lifetype/index.php?op=ViewArticle&articleId=1014&blogId=1

二、Ctags
安装:

aptitude install ctags
在源代码根目录下执行 ctags -r 命令用来为程序源代码生成标签文件,其-r选项表示递
归操作,同时为子目录也生成标签文件。vim利用生成的标签文件,可以进行相应检索、并
在不同的文件C语言元素之间来回切换。

在vim中ctags的简单使用
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_ 这里,'^'表示开头,同理,'$'表示末尾。多个同名的标识符

三、debian默认没有安装cscope


一、安装:atp-get install cscope


运行cscope命令,出现两个面板,上方是一个查找结果的显示面板,下方是一个查找条件
指定面板。使用TAB键在两个面板间切换,也可使用上下左右方向件和翻页键在同一面板内
贴换位置。选中显示面板的某个项,回车即可进入该文件,这是调用vim打开文件,这时就
可以结合ctags使用了。当然也可以直接使用vim打开文件,结合ctags阅读源码。
使用前,必须现使用“cscope-indexer -r”命令递归生成索引信息文件。特殊情况下,还需
要用户使用find命令,主动生成索引信息文件,并指定给cscope工具。 cscope提供了如下
九种查询方式:

Find this C symbol:
#查找指定的C符号
Find this global definition:
#查找指定的全局定义
Find functions called by this function:
#查找指定函数调用的函数
Find functions calling this function:
#查找调用指定函数的函数
Find this text string:
#查找字符串
Change this text string:
#修改指定字符串
Find this egrep pattern:
#查找匹配字符
Find this file:
#查找指定文件
Find files #including this file:
#指定引用头文件进行查找

在对应某一项中输入查找条件,回车即可进行查询,并将结果显示在显示面板。

 K跳转到函数的man页

  gg=G 按indent缩进格式化整个文件
== 格式化整行
=a{格式化当前{}程序块

  gf 查找文件,在.vimrc中用set path=/u/infdev/**/**/** 来设置搜索路径

  /* 折行功能可以将一节浓缩为一行, 只显示其大概. */
zo 打开折行
zc 关闭折叠

  在编辑模式下用ctrl+o可以暂时进行命令模式

  [{ 命令跳转到当前代码块的开头,
]} 会跳转到当前代码块的末尾.
[[ 向前查找一个函数的开始
]] 向后查找一个函数的开始
][ 向前查找一个函数的结尾,
[] 向后查找一个函数的结尾,
{   到前一个空行上
}   到下一个空行上
#   到与当前单词相同的上一个单词上
*   到与当前单词相同的下一个单词上
%   可以让光标从它当前所在的括号跳转到与它相匹配的括号上去,

  CTRL+] 跳转tags定义的地方=        ctrl+t返回调用tag的地方

  gD 查询变量,只在本文件中
gd 查询变量, 只在本函数中

[i        查询变量的定义
[<Tab>    跳到变量定义的地方

  set makeprg=nmake  后面nmake可自己定义,一般不用定义
:make   编译程序
:cnext 跳到下一个编译错误
:cc   看完整的错误信息
:clist 看所有错误信息

  :e b<tab>在命令行用tab可以补全  按ctrl+d列出所有匹配
q: 列出命令窗口

Vim有一种记录宏的机制。你键入"qa"开始把一段宏记录入寄存器变量`a'中。按下来你可以象平常一样键入你要的操作, 只是这些操作都会被Vim记录进它命名为`a'的宏中, 再次再下"q"键, 就结束了宏`a'的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。


二为代码生成数据库
2、首先需要为你的代码生成一个cscope数据库。生成数据库很简单,在你的项目根目录运行下面的命令:
cscope -Rbq

如果不是c代码,使用:

$ find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope -Rbq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
具体的参数的含义可以通过:man cscope 得到。-R: 在生成索引文件时,搜索子目录树中的代码

-b: 只生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include目录

-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件 列表。

-I dir: 在-I选项指出的目录中查找头文件

-u: 扫描所有文件,重新生成交叉索引文件


三在VIM中使用cscope
1 、用vim编辑的时候:
vim FILENAME.c
2 把生成的cscope文件导入到vim中来
:cs add /路径/cscope.out 代码所在目录
我习惯现切换到代码所在目录再操作,所以直接使用:
:cs add cscope.out 就可以了。

3 查看是否已经连接到对应数据库
:cs s


4 cs f s xxxx 查找xxxx出现的地方,它能详细列出哪些文件的哪行的哪个函数引用,以及该行的内容.
,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可 以输入一个正则表达式,这类似于egrep程序的功能。

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g: 查找函数、宏、枚举等定义的位置。
cs f g main 光标跳到main函数的位置

d: 查找本函数调用的函数
cs f d main 列出main函数调用的函数,输入函数所对应的数字,就可以调到相应掉用的函数

c: 查找调用本函数的函数
cs f c main 会输出找到没有匹配的结果,因为没有函数调用main函数

t: 查找指定的字符串
cs f t STRING

f: 查找并打开文件

还有在.vimrc下面加上了键盘映射
map <F8> :Tlist<CR>
这样就可以使用快捷键F8直接进入tlist模式了。这里注意<F8>和 : 之间有空格的。

在.vimrc 下加入一下两行
set tags=tags;
set autochdir
这样使用tags时可以首先在当前目录下查找tags文 件,如果没有则转到父目录查找。依次向上。

posted on 2011-06-04 20:58 flyonok 阅读(2412) 评论(0)  编辑 收藏 引用 所属分类: linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理