vim + ctags
 $ ctags #给同一个目录下的所有文件建立tags

这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件。
如果tags文件不在当前目录下,能在命令模式下用下面的命令设置tag文件
:set tag=tag_file_path

但是一般对我来说tags都在当前目录下,所以我习惯于在~/.vimrc中加入:
:set tags=$PWD/tags

:tag fuction_name#把你带到fuction_name函数的定义处。
这个功能十分有用,以前一直没有注意。

ctrl + ]命令会把当前光标下的单词作为tag的名字,并直接跳转。

ctrl + t命令能回到前一个tag,你能在ctrl + t前面加一个数字表示往回跳
的层数。

Ctrl + g能显示当前正在编辑的文件名,及所在的行号。
如果源文件的排版比较乱的话,能通过命令gg=G来格式化整个源文件。

将Vim改造为强大的IDE—Vim

工欲善其事,必先利其器。一个强大的开发环境可以大大提高工作效率。好吧,我知道这是废话。。。不过,我想一定有很多跟我一样打算进入Linux平台开发 的新手,一开始都为找不到一个像Windows下的VS那样可以一键安装并且功能几乎完美无缺的开发工具而郁闷不已,甚至打算收回刚刚迈出的脚步。所幸的 是,通过几天努力,我总算配置出了一个功能完备的基于Vim的开发环境。这个开发环境除了基本的Vim外,还包括 Ctags,Taglist,Cscope,SuperTab,OmniCppComplete,Winmanager,NERDTree和 MiniBufExplorer等组件。

在开始操作前,先普及下基础概念,然后约定一下表达规范。

1)Vim存在多个配置文件vimrc,比如/etc/vimrc,此文件影响整个系统的Vim。还有~/.vimrc,此文件只影响本用户的Vim。而且~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置。这里我们只修改~/.vimrc文件。

2)Vim的插件(plugin)安装在Vim的runtimepath目录下,你可以在Vim命令行下运行"set rtp“命令查看。这里我们选择安装在~/.vim目录,没有就创建一个。

3)当本文说”在Vim命令行下运行cmdxx命令“时,意思是指在Vim的命令行模式下运行cmdxx命令,即在Vim的正常模式下通过输入冒号":"进入命令行模式,然后紧接着输入命令cmdxx。在后文描述中都会省略冒号":"输入。

4)如果没有说明“在Vim命令行下运行某命令”,则是在shell中执行该命令。

5)如果命令中间被空白符间隔或有与正文容易混淆的字符,我会用双引号将命令与正文区分。所以读者在实际操作时,不要输入命令最前面和最后面引号。

6)本文关于组合快捷键的描述,形如a-b形式的快捷键表示同时按下a键和b键,而形如"a-b c"形式的快捷键,则表示先同时按下a键和b键,然后放开ab键,再按下c键。

    1,安装使用Ctags

Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol), 如变量名,函数名等。比如,tags文件就是Taglist和OmniCppComplete工作的基础。

这里介绍从源代码包安装,安装步骤跟大多数软件的从源代码安装步骤一样。

1)从http://ctags.sourceforge.net/下载源代码包后,解压缩生成源代码目录,

2)然后进入源代码根目录执行./configure,

3)然后执行make,

4)编译成功后执行make install。

5)在~/.vimrc中增加以下这行:

  1. map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

到此,Ctags已安装成功。

使用Ctags的也很简单。 进入我们的项目代码根目录,执行以下命令:

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

另外,由于在前面第5条,我们已经在Vim中配置了Ctrl-F12组合快捷键,所以我们也可以进入代码根目录后,打开Vim,按下Ctrl-F12快捷键自动生成tags文件。

命令执行完后,会在源代码目录生成tags文件。Vim默认会自动读取当前目录下的tags文件,所以不需要修改~/.vimrc文件。此时,我们已经具有定义跳转的功能了。有两组快捷键是最常用的。

Ctrl-]    跳转到光标所在符号的定义。

Ctrl-t    回到上次跳转前的位置。

更多功能通过命令man ctags或在Vim命令行下运行help ctags查询。

    2,安装使用Taglist

Taglist是vim的一个插件,提供源代码符号的结构化视图。

1)从http://www.vim.org/scripts/script.php?script_id=273下载安装包,也可以从http://vim-taglist.sourceforge.net/index.html下载。

2)进入~/.vim目录,将Taglist安装包解压,解压后会在~/.vim目录中生成几个新子目录,如plugin和doc(安装其它插件时,可能还会新建autoload等其它目录)。

3)进入~/.vim/doc目录,在Vim下运行"helptags ."命令。此步骤是将doc下的帮助文档加入到Vim的帮助主题中,这样我们就可以通过在Vim中运行“help taglist.txt”查看taglist帮助。

4)打开配置文件~/.vimrc,加入以下两行:

  1. let Tlist_Show_One_File=1
  2. let Tlist_Exit_OnlyWindow=1

到此安装已经完成。

在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭。示图如下:

我们可以通过Ctrl-w快捷键或鼠标点击在Taglist窗口和编辑区之间切换焦点,在Taglist窗口用鼠标或键盘选择某个符号,然后点击或回车,就可以跳转到该符号定义的位置。

更多功能可通过在Vim命令行下运行help taglist.txt查询。

    3,安装使用Cscope

Cscope提供交互式查询语言符号功能,如查询哪些地方使用某个变量或调用某个函数。

Cscope已经是Vim的标准特性,默认都有支持,官方网址为http://cscope.sourceforge.net/。

1)在Vim下运行version查看Vim支持哪些特性,前面有前缀符号+的为支持。如果支持Cscope,则直接进入2),否则下载Cscope源代码包编译安装。步骤同Ctags安装。

2)确定Vim已支持Cscope后,将文件http://cscope.sourceforge.net/cscope_maps.vim下载到~/.vim/plugin目录。

到这里,我们就可以开始使用Cscope了。

1)使用Cscope需要生成cscope数据库文件。进入项目代码根目录运行命令:

  1. cscope -Rbq -f path/xxx.out

命令运行后会生成xxx.out文件,即cscope数据库文件。更多用法参考man cscope文档。

2)进入项目代码根目录,在Vim下运行命令:

  1. cs add path/xxx.out

此命令将cscope数据库载入Vim。

3)Cscope常用快捷键

Ctrl-\ s 查找所有当前光标所在符号出现过位置。
           Ctrl-\ c 查找所有调用当前光标所在函数的函数。

按下快捷键查找结束后会在编辑区下方出现查找结果的列表,输入结果编号并回车,就能跳转到该查找结果在源代码中的相应位置。例如,我们将光标移到 initial_pool_size变量定义的位置,即17行,然后按下"Ctrl-\ s"组合快捷键,得到示图如下:

然后我们输入2,并回车,就能跳转到第2个查找结果。

为了界面更好看,可以把Cscope的查找结果输出到quickfix窗口,需要在~/.vimrc中加入下面这行:

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

这样,通过快捷键查找某个符号后,会立即跳转到第一个找到的该符号出现的位置。如果你对这次默认跳转的位置不满意,在Vim命令行下运行cw命令,就能在 编辑区下面quickfix窗口看到所有查找结果的列表,点击相应列表项就能跳转到相应位置。这个功能已经跟VS很接近了吧:)

更多功能可通过命令man cscope或在Vim命令行下运行help cscope查询。

    4,安装使用OmniCppComplete

OmniCppComplete主要提供输入时实时提供类或结构体的属性或方法的提示和补全。跟Talist一样,OmniCppComplete也是一个Vim插件,同样依赖与Ctags工具生成的tags文件。安装步骤跟Taglist类似。

从http://www.vim.org/scripts/script.php?script_id=1520下载安装包后。

1)进入~/.vim目录,将安装版解压缩

2)进入~/.vim/doc目录,在Vim命令行下运行"helptags .”

3)在~/.vimrc中加入以下几行:

  1. set nocp
  2. filetype plugin on

OmniCppComplete的使用几乎跟VS下的VA一样。如下图所示,输入m0.之后立即弹出my_class类中所有的函数列表,然后用上下键选择合适的函数。

        更多功能通过在Vim命令行下运行"help omnicppcomplete"查询。

    5,安装使用SuperTab

SuperTab使Tab快捷键具有更快捷的上下文提示功能。跟OmniCppComplete一样,SuperTab也是一个Vim插件。

从http://www.vim.org/scripts/script.php?script_id=1643下载安装版。这个安装包跟先前的几个Vim插件不同,它是一个vba文件,即Vimball格式的安装包,这种格式安装包提供傻瓜式的安装插件的方法。

1)用Vim打开.vba安装包文件。

2)在Vim命令行下运行命令“UseVimball ~/.vim”。此命令将安装包解压缩到~/.vim目录。VImball安装方式的便利之处在于你可以在任何目录打开.vba包安装,而不用切换到安装 目的地目录。而且不用运行helptags命令安装帮助文档。

3)在~/.vimrc文件中加入以下这行:

  1. let g:SuperTabDefaultCompletionType="context"

SuperTab使用很简单,只要在输入变量名或路径名等符号中途按Tab键,就能得到以前输入过的符号列表,并通过Tab键循环选择。

    6,安装使用Winmanager,NERDTree和MiniBufExplorer

前面介绍的几个工具和插件,主要提供快捷的编辑功能,如定义跳转,符号查询,符号提示与补全等。这里的三个插件,主要优化布置VIm的界面。具体来 说,NERDTree提供树形浏览文件系统的界面,MiniBufExplorer提供多文件同时编辑功能,而Winmanager将这NERDTree 界面和Taglist界面整合起来,使Vim更像VS!

分别从http://www.vim.org/scripts/script.php?script_id=1658

http://www.vim.org/scripts/script.php?script_id=159

http://www.vim.org/scripts/script.php?script_id=95

下载NERDTree,MiniBufExplorer和Winmanager安装包(Winmanager还有个更新的vba版本http://www.vim.org/scripts/script.php?script_id=1440,这里选用旧版本的Winmanger)。

1)像其它插件一样,将NERDTree安装包解压到~/.vim目录。并进入doc目录,在Vim命令行下运行"helptags ."命令。

2)MiniBufExplorer只有一个.vim文件,将其拷贝到~/.vim/plugin目录。

3)在~/.vimrc文件中加入以下几行:

  1. let g:miniBufExplMapWindowNavVim = 1
  2. let g:miniBufExplMapWindowNavArrows = 1
  3. let g:miniBufExplMapCTabSwitchBufs = 1
  4. let g:miniBufExplModSelTarget = 1
  5. let g:miniBufExplMoreThanOne=0

4)将Winmanager安装包解压到~/.vim目录。

5)在~/.vimrc文件中加入以下几行:

  1. let g:NERDTree_title="[NERDTree]"
  2. let g:winManagerWindowLayout="NERDTree|TagList"
  3. function! NERDTree_Start()
  4. exec 'NERDTree'
  5. endfunction
  6. function! NERDTree_IsValid()
  7. return 1
  8. endfunction
  9. nmap wm :WMToggle<CR>

6)这个版本的Winmanager好像有个小bug,你在打开Winmanager界面时,会同时打开一个空的文件。这会影响后续使用,所以我们要在打 开Winmanager时关掉这个空文件。在~/.vim/plugin目录下的winmanager.vim文件中找到以下函数定义并在第5行下添加第 6行的内容:

  1. function! <SID>ToggleWindowsManager()
  2. if IsWinManagerVisible()
  3. call s:CloseWindowsManager()
  4. else
  5. call s:StartWindowsManager()
  6. exe 'q'
  7. end
  8. endfunction

到这里,就大功告成了!

现在进入我们的项目目录,打开Vim,按下组合快捷键w-m就可以我们的崭新的Vim了!再次按下w-m就可关闭界面。示图如下:

界面最上面的一条窄边就是MiniBufExplorer,可以看到我打开了两个文件cache.c和assoc.c,是不是很像VS的标签?

紧靠MiniBufExplorer下方左边的矩形区域就是NERDTree。在这个窗口,我们可以用鼠标或键盘方便的浏览整个文件系统,在某个文件上点击或回车,就可以在右边编辑区域打开该文件。

NERDTree下方的就是前面安装的Taglist界面。

   7,其它有用的~/.vimrc设置

设置配色方案,我用的是eveing方案,配色方案保存在/usr/share/vim/vimXY/colors

  1. colo evening

显示行数

  1. set nu

与自动缩进相关的选项

    1. set autoindent
    2. set tabstop=4
    3. set shiftwidth=4
    4. p;   set mouse=a

ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc的更多相关文章

  1. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)

    1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scr ...

  2. 【转】将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

    原文网址:http://blog.csdn.net/bokee/article/details/6633193 工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话.. ...

  3. vim + ctags + taglist配置和使用

    vim +ctags + taglist ,ctags+cscope 安装配置和使用 内容:VIM下ctags和taglist的安装配置方法:一键安装 ctags和cscope的方法 :vim语法高亮 ...

  4. 内核源码阅读vim+cscope+ctags+taglist

    杜斌博客:http://blog.db89.org/kernel-source-read-vim-cscope-ctags-taglist/ 武特博客:http://edsionte.com/tech ...

  5. 第21月第9日 windows下使用vim+ctags+taglist

    1. windows下使用vim+ctags+taglist 最近在公司的同事指导下,学会使用这个东西编写代码,效率提高了不少.所以记录下来,方便大家使用. 1. 下载gvim74.exe文件,并安装 ...

  6. 将Vim改造为强大的IDE

    1.安装Vim和Vim基本插件 首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可: lingd@ubuntu:~/arm$sudo apt-get install vim vim-s ...

  7. 大神是如何装逼的 之 vim插件使用taglist和nerdtree

    本文转载自:http://blog.csdn.net/yaoxingshuai/article/details/51385332 本文主要讲述如何在vim下配置taglist,nerdtree(看代码 ...

  8. vim插件ctags的安装和使用

    vim插件ctags的安装和使用 2013-11-19 20:47 17064人阅读 评论(0) 收藏 举报  分类: 开发工具(3)  linux编程(9)  c/c++编程(11)  版权声明:本 ...

  9. vim与ctags/cscope的完美结合

    1. 安装vim/ctags/cscope ctag 2. 在源码根目录下执行 sudo ctags -R .   会生成tags文件,里面包含着整个源码目录下的符号信息. 3. 直接到达某个符号(比 ...

随机推荐

  1. 20151124 Jquery UI form 表单变成dialog

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 使用ROW_NUMBER进行的快速分页

    DECLARE @pageSize INT ; DECLARE @pageIndex INT ; SET @pageSize = 5 SET @pageIndex =2 ; --第二页,每页显示5条数 ...

  3. Use AUTO Mode with FOR XML (SQL Server 2012) Multiple Table

    SELECT Cust.CustomerID, OrderHeader.CustomerID, OrderHeader.SalesOrderID, OrderHeader.Status FROM Sa ...

  4. 1066. Root of AVL Tree

    An AVL tree is a self-balancing binary search tree.  In an AVL tree, the heights of the two child su ...

  5. C#删除微信自定义菜单

    删除 string access_token = "你的token"; string posturl = "https://api.weixin.qq.com/cgi-b ...

  6. 【PHP】解决html网页乱码问题

    在自己制作一个网页时,时常会遇到网页乱码的问题. 其实导致网页乱码主要有几个原因,以下给出解决方法. 1.HTML的字符编码问题 该问题较常见,也是最明显和最容易解决的. 在网页<head> ...

  7. object 属性 对象的继承 (原型, call,apply)

    object 为一切对象的基类! 属性:constructor: 对创建对象的函数的引用Prototype: 原型(类型) hasOwnProperty(property):判断对象是否有某个特定的属 ...

  8. webapp中的日期选择

    你是否在开发webapp时,选择用哪种第三方日期选择控件绞尽脑汁? 其实不用那么麻烦,现在移动端都是WebKit内核,支持HTML5,其实只要弱弱的将input中将type="date&qu ...

  9. 欢迎使用skymvc框架,简单易用的php框架

    skymvc是一款轻量.简单易用的php mvc框架,经过多个项目实践改良. 特点: 1.mvc架构 2.m.v.c之间可以互相调用 3.简单的路由控制 R("/index.php" ...

  10. php内存申请和销毁

    内存申请 ZendMM使用自身heap层申请内存追踪结果: ZEND_ASSIGN_SPEC_CV_CONST_HANDLER (......) -> ALLOC_ZVAL(......) -& ...