现在的位置: 首页 > 综合 > 正文

VIM插件配置——ctags/taglist/omnicppcomplete/winmanager

2018年02月23日 ⁄ 综合 ⁄ 共 4633字 ⁄ 字号 评论关闭

        VIM的功能强大并不仅仅表现在支持很多快捷方式上,还有很多各种各样的插件,帮助你实现各种功能,方便你编码。这些插件还都是免费开放的,需要的人可以方便的下载到。


1. Ctags

        Ctags可以扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来(在目录下生成tags文件)。

        因为VIM本身没有工程的概念,编辑中全靠程序员自己对代码所处位置的熟悉,跨文件的跳转就没那么容易了。这点对于项目刚接触时还是比较让人头疼的,所以Ctags这个插件很好的解决了这个问题。

        尽管Ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags。

        Ctags可以直接使用apt-get来下载,也可以自行下载:http://sourceforge.net/projects/ctags/files/


        熟练的使用Ctags仅需记住下面七条命令:(很简单吧,呵呵)

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

              -R:ctags循环生成子目录的tags
              --c++-kinds=+px :ctags记录c++文件中的函数声明和各种外部和前向声明
              --fields=+iaS :ctags要求描述的信息,其中i表示如果有继承,则标识出父类;a表示如果元素是类成员的话,要标明其调用权限(即是public还是private);S表示如果是函数,则标识函数的signature。
              --extra=+q:强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。
              这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。
        ● $ vi –t tag (请把tag替换为您欲查找的变量或函数名),例如:
                    $ vim -t main
                    这个命令将打开定义“main”ct(变量或函数或其它)的文件,并把光标定位到这一行。
        ● :ts (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令),如果这个变量或函数有多处定义,在VI命令行模式“:ts”命令就能列出一个列表供用户选择。
        ● :tp (tp 助记字:tags preview)---?此命令不常用,可以不用记

        ● :tn (tn 助记字:tags next) ---?此命令不常用,可以不用记

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

        ● Ctrl + ],这是最方便使用的方法了,把光标移到变量名或函数名上,然后按下“Ctrl+]”,这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。
        ● Ctrl + T,退回原来的地方

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

        可以在vimrc文件中增加这么一句,这样,按F12就可以直接生成tags文件了。
        nmap <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
        需要指出的是,这里的<CR>是需要录入的一部分,并非是一个回车。

2. taglist
        taglist也是VIM下常见的一个插件,这个插件可以把当前文件中的宏、全局变量、函数等tag显示在一个独立的窗口,编码时可以非常方便的帮你掌握文件的内容。
        要使用taglist plugin,必须满足:
         ● 打开vim的文件类型自动检测功能
         ● 系统中装了Exuberant ctags工具,并且taglist plugin能够找到此工具(因为taglist需要调用它来生成tag文件)
         ● 你的vim支持system()调用

        taglist并非用apt-get来获得,而是可以下载到,下载地址:http://www.vim.org/scripts/script.php?script_id=273
        下载后,把该文件在~/.vim/目录中解压缩,这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件
        plugin/taglist.vim – taglist插件
        doc/taglist.txt    - taglist帮助文件
        为了方便的获得帮助,用命令行加入帮助文档,然后就可以方便的使用:help taglist.txt来获得帮助了
        :helptags ~/.vim/doc

        :TlistOpen   —— 打开tag窗口
        :TlistClose  —— 关闭tag窗口
        :TlistToggle —— 在打开/关闭之间切换tag窗口
 
        使用下行的命令可以使用<F8>作为快捷键来打开/关闭tag窗口,同样这里的<CR>是需要录入的一部分,并非是一个回车。
        nnoremap <silent> <F8> :TlistToggle<CR>
        let Tlist_Ctags_Cmd='ctags' "                           因为我们放在环境变量里,所以可以直接执行
        let Tlist_Use_Right_Window=1 "                      让窗口显示在右边,0的话就是显示在左边
        let Tlist_Show_One_File=0 "让taglist              可以同时展示多个文件的函数列表,如果想只有1个,设置为1
        let Tlist_File_Fold_Auto_Close=1 "                 非当前文件,函数列表折叠隐藏
        let Tlist_Exit_OnlyWindow=1 "                          当taglist是最后一个分割窗口时,自动推出vim
        let Tlist_Process_File_Always=0 "                   是否一直处理tags.1:处理;0:不处理。不是一直实时更新tags,因为没有必要
        let Tlist_Inc_Winwidth=0

        在我的vimrc文件中,这一段内容如下:
        nnoremap <silent> <F8> :TlistToggle<CR>
        let Tlist_Show_One_File=1
        let Tlist_Exit_OnlyWindow=1
        let Tlist_File_Fold_Auto_Close=1

3. OmniCppComplete
        omnicppcomplete,Vim中C/C++代码补全插件,基于ctags所生成的标签库。
        同样无法用apt-get来获得,下载地址:http://www.vim.org/scripts/script.php?script_id=1520
        目前最新版本是0.41

        安装就是将下载的包解压到~/.vim目录下,压缩包里面包含三个个目录after和autoload,doc。需要提一下的是文档中说after和autoload目录放在~/.vim目录下即可,我实际使用发现必须在~/.vim/plugin目录下也保持一份才行,也就是需要2份,估计是和我使用的软件版本有关。

        :helptags ~/.vim/doc 就是导入帮助文件。

        插件这就算安装完了。然后再到vim配置文件中加入如下的配置:

        "-- omnicppcomplete setting --
        set completeopt=menu,menuone
        let OmniCpp_MayCompleteDot = 1 " autocomplete with .
        let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
        let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
        let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
        let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
        let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype  in popup window
        let OmniCpp_GlobalScopeSearch=1
        let OmniCpp_DisplayMode=1

4. winmanager

        VIM自带的netrw.vim插件可以在窗口中显示当前目录中的文件并能选择打开,这个功能非常体贴,不过这个窗口看上去比较难看,不象现在的IDE一样简洁明了。

        所以。。。winmanager这个插件就是用来管理文件显示/tag显示/主窗口的,让各个窗口各安其位。

        下载地址:http://www.vim.org/scripts/script.php?script_id=95
        下载后在~/.vim中解压
        plugin/winfileexplore.vim 
               winmanager.vim       - winmanager插件
               wintagexplore.vim
        doc/winmanager.txt          - winmanager帮助文件
        为了方便的获得帮助,用命令行加入帮助文档
        :helptags ~/.vim/doc

        然后在rc文件中加入:
        let g:winManagerWindowLayout='FileExplorer|TagList'
        nmap <F4> :WMToggle<CR>
        nmap <C-w><C-f> :FirstExplorerWindow<CR>
        nmap <C-w><C-b> :BottomExplorerWindow<CR>

        这样设置后,用F4可以方便的控制winmanager的开关

        在安装了这几个插件后,你的VIM的功能已经大大被增强了,拥有了函数跳转,代码补全,tag列表,目录显示等功能,有点类似IDE的样子了,一般的编辑任务已经可以蛮不错的完成了。当然,插件成千上万,其他还有很多很有用的插件,可以实现注释,代码对齐等等功能,各有巧妙不同,这个就需要在日常使用中自己逐步完善了。

抱歉!评论已关闭.