耳前淋巴结在哪:Vim+ctags阅读Qt代码

来源:百度文库 编辑:中财网 时间:2024/05/03 09:26:15

使用Vim+ctags更方便的阅读Qt代码

Vim 实现 Qt 代码的自动补全windows
安装vim。下载ctags for win32并解压到c:\ctags\目录下;将c:\ctags加入windows的path环境变量中;下载omnicppcomplete将解压到vim安装目录的vimfiles目录下;转到qt的include目录下执行ctags -R --c++-kinds=+p --fields=+iaS --extra=+q命令完成后会在该目录下生成一个tags文件,它是omnicppcomplete和vim用来作命令补全的数据库。在qt的src目录下再执行一遍上述命令;编辑vim安装目录下的_vimrc文件,将下述两行加入其中。set tags+=c:\Qt\4.6.3\include\tagsset tags+=c:\Qt\4.6.3\src\tags其中c:\Qt\4.6.3\为Qt 安装目录,请根据你的情况作出调整。linux
下载omnicppcomplete将解压到~/.vim/syntax;转到qt的include目录下,例如/opt/qtsdk-2010.04/qt/include/,执行以下命令find . -name “*.cpp”|xargs ctags -afind . -name “*.[ch]“|xargs ctags -a命令完成后会在该目录下生成一个tags文件,它是omnicppcomplete和vim用来作命令补全的数据库,在qt的src目录下再执行一遍上述命令,例如/opt/qtsdk-2010.04/qt/src/。编辑~/.vimrc,将下述两行加入其中:set tags+=/opt/qtsdk-2010.04/qt/include/tagsset tags+=/opt/qtsdk-2010.04/qt/src/tags


1)根据标题就知道,先要装两个软件包
sudo apt-get install vim ctags
因为默认安装里没有ctags,vim只有vim-tiny版,很多功能都没有
ctags是做索引的,就是把你的函数,变量在哪里定义声明的,记录到一个文件里

2)利用ctags制作索引文件
首先,我们进入我们某个版本的Qt目录
cd qt-embedded-linux-opensource-src-4.5.1
最简单的方法当然是 ctags -R 了,自动生成所以,但是我们不推荐那么做,因为ctags做出来的文件会很大,包括html的文件都会被检索,我们要做的就是把.cpp,.c和.h文件检索就可以了,命令如下
find . -name "*.cpp"|xargs ctags -a
find . -name "*.[ch]"|xargs ctags -a
第一步是把所有的.cpp文件找到,然后通过ctags -a命令把它们的索引加到tags文件里,第二步是找到所有的.c或.h文件,把索引内容加入到tags文件里。现在你到你的当前,目录下就可以看到你的索引文件了,也就是名字为tags的。
ls tags #确认这个文件生成了

3) 可以通过vim在Qt的世界里遨游了
在当前用vim打开一个Qt文件,然后找到一个类名/对象或者函数,把光标(不是鼠标哦)移到上头,按Ctrl+],是不是跳到了该类名/对象或者函数定义的地方?再按一下ctrl+o又会跳回原来的地方。 把o理解成o(ld)就好记了。

4)当然还有其它情况,要说明
a) 一个类名/对象或者函数可能有很多定义或声明的地方(这在Qt中很常见),默认跳到地方可能不是你想要的,那么你可以用tag jump命令。在命令模式下输入
:tj 标记名,就会列出所有该标记的定义。比如我在Vim的命令模式下输入: tj QWidget (别忘了前面的冒号:,它带你进入行编辑模式),就会列出所有QWidget 定义声明的地方,包括类,函数名,变量名(如果有的话),我的环境下显示如下
# pri kind tag file
1 F f QWidget ./src/gui/kernel/qwidget.cpp
class:QWidget
QWidget::QWidget(QWidget *parent, Qt::WindowFlags f)
2 F f QWidget ./src/gui/kernel/qwidget.cpp
class:QWidget
QWidget::QWidget(QWidget *parent, const char *name, Qt::WindowFlags f)
3 F f QWidget ./src/gui/kernel/qwidget.cpp
class:QWidget
QWidget::QWidget(QWidgetPrivate &dd, QWidget* parent, Qt::WindowFlags f)
4 F c QWidget ./src/gui/kernel/qwidget.h
class Q_
GUI_EXPORT QWidget : public QObject, public QPaintDevice
根据最下方的提示,输入前面的序号然后回车,会进入对应的那个定义处。
如果只有一个定义的话,不会出现上面的列表,会直接跳到那个文件去。记住Ctrl+o又会跳回来。
b) 有时候,你可能不记得某个标记的全部或大小写了,也没关系。比如你想看
qvfb的相关内容,你只要在命令模式下输入
: tj /qvfb 然后不断按Tab键,vim会帮你补齐对应的内容,你停在某一个上,然后回车就可以。

5)还有,如果你不在tags所在的目录打开vim的话,上面的命令都失效了,不过你只要在命令模式下输入: set tags=YOURTAGSPATH/tags,比如我在src目录下打开vim,我还想在Qt
代码里跳来跳去那么要我的设置就是在命令模式下输入 :set tags=/home/zhu/Qt/qt-embedded-linux-opensource-src-4.5.1/tags 就可以了。