标签归档:ctags

RSS feed of ctags

最后更新于 .

其实很早就想写这篇文章了,虽然晚上介绍vim的文章很多,本博也已经就vim的使用写了70多篇博文,但是由于历史的原因,还有很多人对vim能做什么存在误解,包括:

  • vim对中文支持不好
  • vim适合临时编辑文本,对IDE的支持不好
  • vim的内嵌脚本语言不够强大,不像emacs的lisp那样无所不能

我不知道提出这些论断的人是因为不了不了解vim的现状,还是是对vim心存偏见。

本博在写vim相关文章的时候,一直坚持只谈技术的原则,不会涉及到与其他编辑器尤其是emacs的任何比较,然而最近在看了某些博文之后,觉得为了不让某些已经过时的观点给初学者选择编辑器时造成困扰,写下这篇文章十分必要。

OK,我们正式开始,在文章的末尾,相信大家都会明白上面的几个观点是否正确。

一.普通人的编辑利器

之所以第一点就提到这个,是因为"文字处理"当然是一个编辑器最基本的功能,而能把编辑的体验发挥到极致的也恐怕只有vim而已了。

这一节,也会参考善用佳软对vim的使用心得,相信用户的感受是最好的证明。

  1. 免费
    用户再也不用去网上辛苦的下载D版了!
  2. 提高输入速度
    这个相信也没有什么好争论的,纯键盘操作的速度是鼠标无法比拟的,虽然会带来一定的学习成本,但是相信还是值得的。
  3. 完美支持中文,并支持多种文件编码
    很多编辑器会有处理多字节编码的问题,而vim完美解决了这一点。(如果你的vim没解决,请参考linux下vim的编译以及终端乱码的最终解决方案
  4. 文本笔记管理
    这要归功于vim的一款插件:voom,详情可以参考善用佳软的这篇博文--VOoM(原VOOF):vim实现带折叠双栏树状文本管理

二 ...

最后更新于 .

由于工作需要,所以最近ssh到服务器上写代码的时间越来越多,反而在本地用gvim写代码的机会却少了,所以工作方式上也就发生了一点变化。

由于ctags本身在windows下运行效率的瓶颈(还有gvim对tags文件的检索),我在windows下面很少愿意提前装载tags的,不过在linux下就完全不一样啦,即使几百兆的工程 tags,在linux下面配合Omnicppcomplete进行全能补全也是速度飞快的。

下面是一些我常用的操作:

一.手动加入、删除文件所在目录的tags文件到vim的tags搜索中

map cta :call Add_tags()<CR> 
map ctd :call Del_tags()<CR> 
function Add_tags()     
    let dir =expand("%:p:h")      
    let curtags = dir.g:vimrc_splitstr."tags"     
    let curtags=substitute(curtags,'\\','\','g')     
    if filereadable(curtags)         
        exec "set tags+=" ...

最后更新于 .

好吧,我承认,我完全是为了让ctags每天固定时间点帮我给vim生成tags文件……
crontab说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数 :

crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。

时程表的格式如下 :

f1 f2  f3 f4  f5 command
分 时 日 月 周 ...

最后更新于 .

在使用C++时,我们经常会使用到STL,相信很多人都想过,如果vim能实现stl库自动补全就好啦,这篇文章,我们就来实现这一点。 (文中所有操作均在windows下进行,在linux也一样可以实现,笔者就不写了)

1.请确保安装好了ctags,和omnicppcomplete;如果你还没有安装好,请参考这两篇文章:把VIM打造成一个真正的IDE(2)把VIM打造成一个真正的IDE(3)

2.下载STL库的头文件和实现。下载路径如下: http://www.vim.org/scripts/script.php?script_id=2358

OK,现在工具已经准备齐了,接下来就是生成tags啦。 去刚下载的STL目录,用ctags命令生成tags文件,命令如下:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

(如果你看了我之前的文章,那么直接用F12生成就行)

有了tags之后,你可以把这个tags换个名字,比如叫stl_tags,然后放到C盘,通过命令

set tags ...

最后更新于 .

之前已经详细的介绍了在 vim中使用ctags ,这篇文章我们就来详细介绍一下如何在vim中使用cscope。

首先,我们还是了解一下什么是cscope。

简单来讲,cscope主要用来协助浏览C/C++语言,他的功能要强大于ctags,不仅支持变量/函数的定义查询,还记录了函数的调用处查询等功能,所以也有说法称cscope的诞生就是为了取代ctags。

无论这个说法是否有据可依,对使用方来说,当然是希望功能越强大方便越好啦,所以这也是我们为什么讲ctags和cscope都装上的原因啦。

第二,我们来说一下vim的支持。

cscope没有ctags那么幸运,cscope在大部分的linux下的vim中是没有提供支持的(但是在windows下的gvim都提供了支持),所以,如果你打算要在linux下面使用vim+cscope,那么1,你要下载安装cscope。2,你要重新编译vim,加上支持选项: --enable-cscope 。

当然,cscope也提供了windows版(否则windows下gvim怎么和cscope搭配嘛...),分别下载地址如下:

cscope(linux):http://cscope.sourceforge.net/
cscope(windows):http://sourceforge.net/projects/mslk/files/

当然,安装的最后一步就是,不要忘记讲cscope放进的环境变量里!

第三,好了 ...

最后更新于 .

如何在Vim中使用ctags?之前在《把Vim打造成真正的IDE》系列里已经讲过大致的ctags在vim中的使用,这篇文章我们就详细的讲一下。 首先要明白,ctags是什么? 官方的解释是:

产生标记文件以帮助在源文件中定位对象。

其生成的标记文件tags中包括这些对象的列表:

用#define定义的宏 枚举型变量的值 函数的定义、原型和声明 名字空间(namespace) 类型定义(typedefs) 变量(包括定义和声明) 类(class)、结构(struct)、枚举类型(enum)和联合(union) 类、结构和联合中成员变量或函数

那么我们用怎样的参数来使ctags正常的生成我们需要的tags文件呢?在这里我们就不去挨个学习那些枯燥的参数了,直接参看 omnicppcomplete 提供的ctags生成语句:

ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .

每个参数解释如下:

-R:ctags循环生成子目录的tags --c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明 --fields=+iaS ...

最后更新于 .

好了,接着前面的两篇,我们今天来写《把VIM打造成一个真正的IDE》系列的终结篇。

我们之前已经让在VIM下看代码变得方便与简单,现在我们来让用Vim写代码也一样方便~看完本篇之后,你就可以完全抛弃sourceinsight之类的工具啦~

3)omnicppcomplete.vim

实现写C/C++语言时自动补全  下载插件

惯例,先截图:

其实使用很简单,下载 omnicppcomplete 然后按照说明将插件安装到vimfiles下面,目录结构如下:

after\ftplugin\cpp.vim
after\ftplugin\c.vim

autoload\omni\common\debug.vim
                    \utils.vim

autoload\omni\cpp\complete.vim
                 \includes.vim
                 \items.vim
                 \maycomplete.vim
                 \namespaces.vim
                 \settings.vim
                 \tokenizer ...

最后更新于 .

OK,上一篇文章,我们已经配置好了一个可以正常使用的VIM,那么在我们真正来到程序员的VIM世界之前,希望你能在VIM里面再多加下面几个配置。

set go= "无菜单、工具栏

对,让我真正抛弃鼠标,进入美妙的VIM之旅吧!

首先说说一个IDE应该有的几个功能:

1)源代码结构及函数列表

2)变量定义支持跳转等

3)代码自动补全 当然VIM还给了我们几个小惊喜:

4)快速批量注释与反注释

5)由注释直接生成文档

6)文件头作者信息自动添加

7).cpp和.h文件之间的快速切换

那么接下来,我们久来看看我们将会用到的插件列表。

首先介绍一下一些必备知识,我们需要下面两样东西,来辅助完成vim成为IDE的大业--ctags和cscope,这两样东西不是vim的插件而是可执行程序,linux和windows下都有。ctags主要实现了c、c++、java、c#等语言的智能分析,并声称tags文件,后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于他。

有了tags文件后,只需要在变量上按下 CTRL + ]键,就可以自动跳到变量定义的位置。

而cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子,ctags只能分析出这个函数在哪里被定义 ...