文档章节

Ubuntu下创建vim+Taglist+cscope+ctags组合编辑器

贪睡猫仙mosen
 贪睡猫仙mosen
发布于 2014/06/17 12:03
字数 3584
阅读 163
收藏 7
点赞 0
评论 0

有人抱怨Linux系统下没有类似于VC之类的方便快捷的编辑器,有人用gedit, 有人用vim,但是都不方便而且也没有自动补全之类的方便用户的功能。本文简单介绍使用vim中的几个插件(Ctags、Cscope和TagList) 实现一个强大的编辑器,希望可以帮助您学习、使用。

一、软件安装

Ubuntu给我们安装软件提供了很大的便利,比如说,安装vim我们可以直接使用"sudo apt-get install vim"即可安装!

同样,cscope和ctags也可以使用相同方法安装,这是多么畅快淋漓啊!感谢Ubuntu给我们用户如此便利!


对于Taglist使用这个方法安装不了,我们需要先下载,然后安装完成:

首先上网下载Taglist插件,下载完成后解压,再将文件下的taglist.vim使用cp命令拷贝到HOME/.vim/plugin文件夹下(cp -r taglist.vim ~/.vim/plugin)


这样,vim+Taglist+cscope+ctags四种工具我们是安装好了,但是如何使用呢?


二、Vim简介及配置

vim是一个非常好用的编辑工具,以下介绍几个常用的底行模式命令:

(1). 设置缩进

     :set    smartindent      // 设置缩进

      :set smartindent shiftwidth=4      // C语言自动缩进,缩进值为4个字符宽度

(2). 显示光标行列信息

      :set ruler             // 显示光标信息(右下角)

(3). 查看制表符

      :set list               // 显示制表符,以^符号显示制表符的位置

(4). 查看行数信息

     :set number        //显示行号(左边)

(5). 关键字高亮

    :syntax on                  //关键字高亮

(6).  多文件编辑 ,在编写程序时有可能需要同时编辑多个文件,在这种情况下,需要如下设置

    : split two.c             //  多文件编辑


当然,如果不嫌麻烦,可以在每次打开Vim时 输入如上命令,如我经常用的是:set  number :set ruler :syntax on :set smartindent  命令,如果将平时在底行模式下输入的命令直接写入配置文件,则以后使用Vim时不用再次输入这些命令。

首先,试着在Vi的底行模式下输入如下命令,如果不支持的话,去下载一个Vim的全版本,sudo apt-get install vim-full。

以下是修改配置文件的方法:

(1). 找到Vimrc文件。

(2) 查看文件的权限:

zhouyl@ubuntu :~$ cd /etc/vim
zhouyl@ubuntu :/etc/vim$ ls
vimrc   vimrc.tiny
zhouyl@ubuntu :/etc/vim$ ls -l vimrc
-rw-r--r-- 1 root root 3449  9月 11 17:30 vimrc

(3) 如果没有写权限的话,修改权限,使我们可以修改该配置文件

   sudo chmod a+w vimrc
 (4)根据个人需要将上诉命令写入配置文件
       比如,我个人的设置是: syntax on , set ruler ,set number , set smartindent shiftwidth=4

下面贴上我的vimrc文件的配置信息:

[html] view plaincopy

  1. "显示行号      

  2. "set number "或者set  nu  

  3. map <F5> <Esc>:set nu<CR>   "映射F5显示行号,参考"vim 按键映射"(http://www.pythonclub.org/vim/map-basic)  

  4. map <C-F5> <Esc>:set nonu<CR>   "映射Ctrl+F5为不显示行号  

  5.   

  6. "检测文件的类型      

  7. filetype on  

  8.   

  9. "记录历史的行数      

  10. set history=1000  

  11.   

  12. "自动对齐      

  13. set autoindent  

  14. set cindent  

  15.   

  16. "智能选择对齐方式      

  17. set smartindent  

  18.   

  19. "tab为4个空格      

  20. set tabstop=4  

  21.   

  22. "当前行之间交错时使用4个空格      

  23. set shiftwidth=4  

  24.   

  25. "设置匹配模式,输入做括号会出现右括号      

  26. set showmatch  

  27.   

  28. "编辑时显示光标状态      

  29. set ruler  

  30.   

  31. "高亮查找    

  32. set hlsearch  

  33.   

  34. "粘贴插入  

  35. set paste  

  36.   

  37. "快速匹配      

  38. set incsearch  

  39.   

  40. "修改文件自动备份      

  41. if has("vms")  

  42.     set nobackup  

  43. else  

  44.     set backup  

  45. endif  

  46. """""""""""""设置开启ctags"""""""""""""     

  47. map <F4> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>  

  48.   

  49. "第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到  

  50. tags文件,或者没有找到对应的目标,就到父目录 中查找,一直向上递归。因为tags文件中记录的>路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。   

  51. set tags=tags;  

  52. set autochdir  

  53. "绝对路径  

  54. "set tags=/home/long/workstation/ganguio/uio-8139d-driver/V7/tags,/home/long/linux-3.7.3/drivers/uio/tags  

  55.   

  56.   

  57. """""""""""""""""Taglist设置"""""""""""""""""           

  58. map <F3> : Tlist<CR>  ""按下F3就可以呼出了  

  59. "let Tlist_Auto_Open = 1  "在启动VIM后,自动打开taglist窗口  

  60. let Tlist_Ctags_Cmd = '/usr/bin/ctags'  "设定ctags的位置  

  61. let Tlist_Use_Right_Window=0 " 1为让窗口显示在右边,0为显示在左边  

  62. let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表,设置为1时不同时显示>多个文件的tag,只显示当前文件的  

  63. let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件中的tag时,taglist只显示当前文件tag,>其他文件的函数列表折叠隐藏  

  64. let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动退出vim  

  65. "let Tlist_Use_SingleClick= 1    " 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置  

  66. "let Tlist_Process_File_Always=0  "是否一直处理tags.1:处理;0:不处理  

  67.   

  68.   

  69.   

  70. """""""""""""""""""""""cscope设置""""""""""""""""""      

  71. set cscopequickfix=s-,c-,d-,i-,t-,e-    

  72. if has("cscope")    

  73. set csprg=/usr/bin/cscope    

  74. set csto=1    

  75. set cst    

  76. set nocsverb    

  77. " add any database in current directory     

  78. if filereadable("cscope.out")    

  79.    cs add cscope.out    

  80. endif    

  81. set csverb    

  82. endif    

  83.   

  84. nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>  

  85. nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>  

  86. nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>  

  87. nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>  

  88. nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>  

  89. nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>  

  90. nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>  

  91. nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>  


因为我的文档中的原配置文件已经有了语法高亮:

" Vim5 and later versions support syntax highlighting. Uncommenting the next

" line enables syntax highlighting by default.

if has("syntax")

  syntax on

endif

所以我就没写了,您如果vimrc文件里面没有此项建议自己加上syntax on设置语法高亮


PS:在配置文件中"符号后的内容是注释,而且在配置文件中是不需要添加符号的 ,这里关于cscope、ctags和Taglist的设置可以先写上,后面将对这三个插件有介绍。好了,现在去开一个Vim,编辑一个程序看看,是不是感觉很不一般呢?

好了,下面顺便演示下,智能补全的用法,我分四种情况:1、前面申明过的变量或者函数名的补全;2、结构体等自建结构的补全;3、STL等标准库的补全;4、括号、引号等自动匹配补全。

对于第一种情况,写程序的过程中,直接用CTRL+p即可选择,对于第二种情况,如果想申明了结构体T,想在输入T.时弹出成员供选择,只需在用之前按一下:CTRL+F12,然后效果如图:


三、TagList插件简述及使用

TagList插件,是一款基于ctags,在vim代码窗口旁以分割窗口形式(如上图所示)显示当前的代码结构概览,增加代码浏览的便利程度的vim插件.Vim中加载代码文件后,可以使用以下命令控制taglist:

TlistOpen(直接Tlist也可)打开并将输入焦点至于标签列表窗口,效果如上图所示

TlistClose关闭标签列表窗口

TlistToggle切换标签列表窗口状态(打开←→关闭),标签列表窗口是否获得焦点取决于其他配置

ctl-wwctl-w+  方向键窗口切换(taglist本质上是一个vim分隔窗口,因此可以使用ctl-w系列快捷键对窗口进行切换操作)Taglist窗口主要有以下操作

F1:打开帮助回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)

o:新建一个窗口,跳到标记定义处

p:预览标记定义(仍然在taglist窗口)

空格:显示标记的原型(如函数原型)

u:更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)

s:选择排序字段(暂时我也不知道什么意思)

d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)

x:n放大/缩小taglist窗口

+:展开(指标记)

-:折叠

*:全部展开

=:全部折叠

[[:将光标移到前一个文件的起点

]]:将光标移到后一个文件的起点

q:退出taglist窗口

F1:关闭帮助


四、Ctags插件简介及使用

ctags使用简介VIM简单易用,大家只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法,上面也简单介绍了点vim的用法。但是对于Linux下的C/C++的程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择。^_^尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。熟练的使用ctags仅需记住下面七条命令:(很简单吧,呵呵)

1$ctags –R * ($Linux系统Shell提示符)

2.$ vi –t tag (请把tag替换为您欲查找的变量或函数名)

3:ts(ts助记字:tagslist,  “:”开头的命令为VI中命令行模式命令)

4:tp(tp助记字:tagspreview)---此命令不常用,可以不用记

5:tn(tn助记字:tagsnext)  ---此命令不常用,可以不用记

6Ctrl+ ]跳到光标所在函数或者结构体的定义处

7Ctrl+ T返回查找或跳转

下面我们逐条的解释上面的命令:“$ctags –R*”:“-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。Tags文件中包括这些对象的列表:用#define定义的宏枚举型变量的值函数的定义、原型和声明名字空间(namespace)类型定义(typedefs)变量(包括定义和声明)类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数VIM用这个“tags”文件来定位上面这些做了标记的对象。剩下的命令就是定位这些对象的方法:“$vi  –t tag” :在运行vim的时候加上“-t”参数,例如:[/usr/src]$vim  -tmain这个命令将打开定义“main”(变量或函数或其它)的文件,并把光标定位到这一行。如果这个变量或函数有多处定义,在VI命令行模式“:ts”命令就能列出一个列表供用户选择。“:tp”为上一个tag标记文件,“:tn”为下一个tag标记文件。

当然,若当前tags文件中用户所查找的变量或函数名只有一个,“:tp,:tn”命令不可用。

(最方便的方法是把光标移到变量名或函数名上,然后按下“Ctrl+]”,这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。用“Ctrl+T”可以退回原来的地方。即使用户使用了N次“Ctrl+]”查找了N个变量,按N次“Ctrl+t”也能回到最初打开的文件,它会按原路返回  。 ^_^

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:settags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。在完成编码时,可以手工删掉tags文件(帚把不到,灰尘不会自己跑掉^_^)。

有时候系统提示“找不到tag”时不要一味着急,有可能你想要查询的函数时系统函数,如果这样,那妳幸运勒,可以使用Shift+K来查询。如果不是没也可以自己找到tags文件,打开查询,如果还是找不到...哼哼,我也没辙了!

五、Cscope插件简介及使用

Cscope是一个类似ctags的工具。  你可以把它想作是超过频的ctags,因为它功能比ctags强大很多。 在Vim里,通过cscope查询结果来跳转就象跳转到其他的标签完全一样;它被保存在标签栈里。这样你就可以象使用tags一样在函数等等之间便捷的跳转。在VIM中使用cscope非常简单:

首先在目录下使用“cscope -kqb”生成cscope.out文件;

使用时先在VIM的命令行下调用“cscope add/../../cscope.out”(或cs add /../../cscope.out)命令添加一个cscope数据库,然后就可以调“cscope  find”(或 cs f )命令进行查找了。

VIM支持8cscope的查询功能,如下:

c:Find functions calling this function//查找调用本函数的函数

d:Find functions called by this function //查找本函数调用的函数

e:Find this egrep pattern//查找egrep模式,相当于egrep功能,但查找速度快多了

f:Find this file //查找并打开文件,类似vimfind功能

g:Find this definition//查找函数、宏、枚举等定义的位置,类似ctags的功能

i:Find files #including this file //查找包含本文件的文件

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

t:Find assignments to //查找指定的字符串

例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs f c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs  f s work”,查找这个符号出现的位置,现在vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。

cscope在vim命令行下还可以执行下列操作

help: Show this message(Usage: help)

kill: Kill a connection(Usage: kill #)

reset:Reinit all connections(Usage: reset)

show: Show connections (Usage: show)


更详细的Cscope用法见:http://blog.csdn.net/longerzone/article/details/7788010


© 著作权归作者所有

共有 人打赏支持
贪睡猫仙mosen
粉丝 2
博文 30
码字总数 6551
作品 0
松江
个人站长
GIMP 2.8.6 发布,免费开源 PS 软件

GIMP 被称为是开源免费的 PS 软件。GIMP是一款功能强大的图像编辑器,允许用户编辑、管理、处理、完善、更新和调整图片通过其大量的组合功能。 GIMP已经更新到2.8.6版本,相比2.8.4版本更稳定...

oschina ⋅ 2013/06/29 ⋅ 11

Ubuntu Linux系统下Gnome桌面快捷键配置

1、用快捷键启动程序 为您指定的程序添加一个键盘快捷键,只需按相应快捷键便能启动程序等,就像我们使用 XP 时为快捷方式添加热键一样,GNOME 也有这些功能,而且设置并不难。首先打开终端输...

zt371 ⋅ 2009/05/08 ⋅ 0

在 Ubuntu 上安装 LaTeX

LaTeX(LATEX,音译“拉泰赫”)是一种基于TeX的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也...

红薯 ⋅ 2012/08/08 ⋅ 15

linux 下 C 编程和make的方法 (补充:srcibes的推荐)

补充推荐一下scribes。大家可以google一下scribes的评论。在ubuntu下面安装很方便。我这里只是针对新手,说一下我推荐scribes的理由。 1、VI真的不是你们用的。是牛人用的。他们之所以牛的能...

中山野鬼 ⋅ 2012/03/28 ⋅ 2

10 个特殊用途的 Linux 发行版

Linux 的好处就在于你可以任意定制,只要你想做。很多流行的 Linux 发行版最开始都是由个人和小组发起的。今天让我们来看看一些有着特殊用处的 Linux 发行版。 1. Parted Magic Parted Magic...

oschina ⋅ 2012/12/27 ⋅ 25

ubuntu下c/c++基本编译环境的搭建

又或者你可以在终端输入:gvim hello.c然后同样输入代码保存.然后在终端输入:gcc -Wall hello.c -o hello如果没有发现错误,那就再输入./hello那么在终端里.你就可以看到你的程序输出:Hello,ub...

我是一只鱼 ⋅ 2011/10/12 ⋅ 0

Sketsa 6.7 发布,SVG 矢量图创建工具

Sketsa是一个基于SVG的矢量图创建工具。此格式基于XML,允许放大或者缩小尺寸到任意分辨率而不会产生任何细节损失,同时修改时还可得到实时的效果反馈。Sketsa提供了调色板、DOM编辑器、资源...

oschina ⋅ 2012/05/31 ⋅ 5

Fedora15上实现桌面背景图片渐变

桌面背景图片渐变,在Ubuntu中很容易实现。Ubuntu默认就自带了几款渐变壁纸。但换到Fedora后,貌似没发现有自带的渐变壁纸。 拿Linux Deepin tool里的deepin-wallpaper-xml-generator脚本实验...

君无畏 ⋅ 2011/07/05 ⋅ 1

5 款不可缺席的 HTML5 编辑器

本文介绍5款大腕级,谈及编辑器不可缺席的HTML5编辑器。列表如下: Aloha Editor Aloha Editor 是个基于浏览器的富文本编辑器框架,JavaScript创建。不像其他大多数的HTML编辑器,Aloha可以被...

老枪 ⋅ 2011/05/27 ⋅ 5

Ubuntu15.04安装KVM

一、虚拟机环境配置 刚装好的ubuntu15.04桌面版,没有vim编辑器,没有ssh连接,好郁闷!! 先配置网卡,让其能上网,咱们要安装点有用的应用laks@laks:~$ sudo gedit /etc/network/interfac...

moyier123 ⋅ 2015/12/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 31分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部