Ubuntu10.04的vim插件扩展

来源:互联网 发布:微商和淘宝 编辑:程序博客网 时间:2024/06/17 04:22

一、跳转

1,gg——跳转到文本顶端

2,G——跳转到文本底端

3,ngg /nG—— 跳到第n行 

二、代码提示

    想要手动的代码提示(输入历史、头文件中的函数),可以使用Ctrl+P快捷命令。

    自动代码提示,要进行设置,见本文的第四小节。

三、配置文件

    在参考资料[4]中提到~.vimrc文件,在Ubuntu10.04中默认是没有这个文件,但是可以自己创建一个,写上内容,重启终端,然后同样可以生效。

    其实,在ubuntu10.04中,vim的配置文件在/etv/vim/中,如下图


    其中,vimrc中的配置有效范围是全局的,而上述的.vimrc的配置有效范围是局部的。另外,在/etc/vim/vimrc中提到:


    因此,我们也可以在/etc/vim目录下创建一个vimrc.local文件,用于配置局部的参数。

四、neocomplcache插件_关键词、历史记录提示

    根据参考资料[3][4]的提示,点击这里下载neocomplcache插件,然后在~目录下创建.vim目录,并将neocomplcache的zip包解压到这个目录。如下图所示:


    由上图可见,共5个文件/目录,打开README.md,其中部分内容如下:


    根据上述Installation的提示,第1步是将插件放到~./.vim/目录下。这1步刚才已经完成,关键是第2步:在.vimrc中添加let go:neocomplcache_enable_at_startup=1。

   根据”三、配置文件"说明,我们在~目录下创建一个.vimrc文件,然后输入:

let go:neocomplcache_enable_at_startup=1

    保存.vimrc文件,然后关闭终端,再重新打开。使用vim创建一个*.c文件,然后写一些代码进行测试。可以发现,这时候不仅可以自动提示关键字,还可提示文本中已有的词,如下图:


    更多的设置,可以讲README.md中的example复制到.vimrc。但是使用这个配置,如果用方向键选择一个提示关键字,然后回车,这时候会自动换行。这非常不适合本人的使用习惯,于是对于go:neocomplcache,使用let go:neocomplcache_enable_at_startup=1就够了!。

    此时,vim可以提示历史关键词和c语言关键词,但是还不能做到自动提示头文件中包含的函数。

五、ctags_函数原型提示

    根据第四小节的配置,已经可以做到自动提示c语言关键字和历史关键词,这里我们将会借助ctags来实现库函数的提示。

根据参考资料[13]的提示,Ubuntu中使用以下命令安装ctags。

    关于ctags的详细用法,见参考资料[9][10][11][12][13],这里主要对它们做一个总结。

(1)为当前目录下的.h和.c文件生成tags文件


   这时候,编辑test.c时,可以自动提示world函数原型(在world.h中声明)


(2)为/usr/include生成tags

    进入/usr/include目录,执行以下命令:

ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p  -f ~/.vim/systags *

    然后在~.vimrc中添加set tags+=~/.vim/systags,如下图:


    这时,重启终端,然后使用vim打开一个*.c文件进行编辑测试,就可以自动提示/usr/include下的库函数了,如下图。


(3)多个tags

    在(1)(2)中共产生了2个tags,一个在当前目录,一个在~/.vim目录。vim可以同时使用多个tags,因此这两个tags都有效。但是,非当前目录的tags需要使用set tags+=...命令来告诉vim它的位置,另外,非当前目录下的tags名字可以任意起。例如本例中~/.vim目录下的tags命名为systags,并且在.vimrc中使用set tags+=~/.vim/systags告诉vim。

(4) vim -t functionName

    根据参考资料[12]的提示,可以在Linux终端中使用vim - t functionName的方法跳转到定义functionName的位置,但是根据(2)的命令产生的tags,测试printf时,提示:


    由于(2)是进入到/usr/local执行ctags命令生成tags的,因为没有指定ctags的路径,因此默认使用当前目录(相对路径)因此vim以为tags的位置和*.h在同一个位置(~/.vim/,也即是root用户下的/root/.vim/)!但实际上*.h在/usr/include中,而tags在~/.vim目录中,它们是分开的,因此导致了这个错误!

    解决这个问题的方法是,在使用ctags命令时,使用绝对路径,在任意目录上执行:

ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p  -f ~/.vim/systags /usr/include/*

    这是,再在Linux终端上执行vim -t printf,则可跳转到printf的声明处,如下图:


(5) tag functionName

    (4)是在Linux命令行中输入的,如果已经使用vim打开了一个文件,怎样跳转到特定函数的定义处呢?答案是在vim中使用tag functionName命令,如下图:


    使用这个命令,同样可以达到(4)的目的。

(6) ctags -R

    在上的(4)(5)中,只是跳转到了printf函数的声明处,而不是定义处。这主要是(3)中虽然改进了ctags的参数,使得可以正常跳转,但是没有使用-R参数。/usr/include目录下有很多*.h文件,同时也存在很多子目录,子目录中还有*.h文件...而没有使用-R参数,则会将这些子目录忽略掉!因此,在这里对ctags的参数再做一个修改(加了-R,就不用*号了!) :

ctags -I __THROW --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p  -f ~/.vim/systags -R  /usr/include/

    这时,再使用(4)(5)的方法,就可以跳转到printf的定义处,如下图:


    但是这时候又出现了新问题:再编辑*.c文件时,不能像(2)那样自动提示函数原型了!至于为什加了-R参数就不行,还在纠结中!

    经过测试,在其选择一个目录,如~/Documents,在目录中创建*.c文件,然后创建子目录并在其中创建*.h文件,在*.h文件中声明函数。最后使用ctags -R --c-kinds=+p 生成tags,这时使用vim可以自动提示子目录中*.h中声明的函数!

    这就说明不是-R的问题,而是/usr/include的问题!

六、cscope_强大的查找功能

    使用ctags遇到不爽,那就试试cscope吧。

    在Ubuntu中使用以下命名安装cscope:


    装好后,无需任何配置,即可使用!

    进入/usr/include/目录,执行以下命令:


    即可在当前目录下生产3个文件,如下图:


    cscope.out就是我们在vim中要使用到的文件。使用vim打开一个*.c文件,然后在命名模式下加载cscope.out文件和其目录,如下图:


    然后使用以下命令查找printf:


    结果如下:


    根据提示,输入1,回车,然后可以跳转到printf的定义处:


    需要注意的是,在使用cs add添加cscope.out时,并需同时添加源码目录/usr/include,否则在上面的跳转中会失败:


    如果不想每次都手动在vim中使用cs add添加cscope.out和目录,可以在.vimrc中添加,如下图:


    有关更多的cscope的命令,见参考资料[17][18][19]。

七、OmniCppComplete_类成员补全

    下载一个omnicppcomplete-0.41.zip,然后复制到~/.vim,使用unzip解压,完成安装(由于四中安装neocomplcache时创建了一些目录,所以这里不用再创建,直接解压即可)。然后,根据参考资料[3]有关omnicppcomplete的说明去配置~/.vimrc即可。其实,关于omnicppcomplete的使用,也可以见解压后doc目录中的omnicppcomplete.txt。

八、taglist_显示函数清单

    下载taglist.zip,解压到~/.vim中的plugin子目录即可。下图是使用效果:


    使用方法也很简单,就在vim的命令模式下输入Tlist即可:


九、YouCompleteMe

    纵使安装了上述的插件,使用起来还是不方便,因此尝试一个全新的插件YouCompleteMe。

(1)安装vim-7.4

    由于YouCompleteMe需要新版的vim,因此先将原来的vim-7.2卸载:apt-get remove vim vim-tiny vim-common vim-runtime gvim vim-gui-common,如下图:


    然后参照参考资料[28]中的方法编译安装vim-7.4,并且配置环境变量。编译过程中出错的解决办法,见参考资料[30]。

    安装好新版的vim后,发现不支持cscope,如下图:


    此外,准备使用YoucompleteMe时,提示

    可见,还得重新编一次,并且要加上Python 2.x的支持,详见参考资料[32]。需要说明的是,其中提到的--enable-multibyte

不是必要的,我编译的时候没有写上。

(2)Vundle_vim管理插件的工具

    具体安装可见参考资料[26],还可以看Vundle.vim-master.zip中的README.md。需要注意的是,参考资料[26]的.vimrc的配置有误,主要是将Bundle 'scrooloose/syntastic'的位置改一下就好。修改后如下所示:

set nocompatible              " be iMprovedset rtp+=~/.vim/bundle/Vundle.vimcall vundle#rc()" let Vundle manage Vundle" required!" Bundle 'gmarik/vundle'" My bundles here:"" original repos on GitHubBundle 'Valloric/YouCompleteMe'Bundle 'scrooloose/syntastic'Bundle 'tpope/vim-fugitive'Bundle 'Lokaltog/vim-easymotion'Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}Bundle 'tpope/vim-rails.git'" vim-scripts reposBundle 'L9'Bundle 'FuzzyFinder'" non-GitHub reposBundle 'git://git.wincent.com/command-t.git'" Git repos on your local machine (i.e. when working on your own plugin)Bundle 'file:///Users/gmarik/path/to/plugin'" ...filetype plugin indent on     " required!

    根据参考资料[26]的方法,使用Vundle下载了各个插件后,使用vim打开一个*.c文件,提示如下:

    

    可见,YouCompleteMe需要编译!下面,关于它的编译方法。

(3)LLVM+Clang

    在编译YouCompleteMe前 ,还需要编译LLVM+Clang,详见参考资料[26]。由于编译LLVM+Clang要求gcc编译版本为4.7以上,安装方法详见《gcc》,我安装了最新版本gcc-4.9.2。

    由于使用了新版本的gcc,因此编译过程出现以下错误。


    解决方法见参考资料[33]。需要说明的时,这是需要使用比参考资料[33]更新的libstdc++库,点击这里下载,或者到参考资料[44]中找一个合适的。

    解决了libsc++.so.6的问题,现在又出了libc.so.6的问题了,如下图。这个问题比较难解决,详细见《Ubuntu10.04升级glibc》。

  

(4) 结果

    在Ubuntu10.04上安装YouCompleteMe真是折腾,主要是glibc太旧了,而且更新不成功(见《Ubuntu10.04升级glibc》),因此我改用Ubuntu14.04了(见《Ubuntu14.04配置YouCompleteMe》)。

    

参考资料

[1]VIM下的跳转练习

[2]VIM常用命令简记

[3]vim代码自动补全函数提示设置

[4]vim自动补全插件-NeoComplCache

[5] .vimrc的设置

[6]每日vim插件--强大的自动补全neocomplete.vim和supertab

[7]vim的关键字补全

[8]vi/vim使用进阶: 自动补全

[9]ctags为系统头文件目录生成tags

[10]ctags 小记

[11] ctags使用详解

[12]代码查看小妙招--vim ctags cscope的简单用法

[13]vim代码补全终极配置

[14]Vim自动补全神器–YouCompleteMe

[15]Vim自动补全插件----YouCompleteMe安装与配置

[16]vim 代码提示功能,让vim可以媲美IDE(转)

[17]Vim + Cscope打造Linux下的Source Insight

[18]Cscope的使用(领略Vim + Cscope的强大魅力)

[19]Cscope 的使用

[20]手把手教你把Vim改装成一个IDE编程环境(图文)

[21]Vim + Ctags + Tlist

[22]Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

[23]Ubuntu12.04 YouCompleteMe 终极解决方案

[24]ubuntu配置vim+youcompleteme记录

[25]Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

[26][笔记]ubuntu 13.04 配置YouCompleteMe

[27]Ubuntu12.04安装YouCompleteMe插件

[28]ubuntu12.04安装vim7.4

[29]Ubuntu源码编译安装GVIM7.4/VIM7.4  

[30]Linux中编译安装VIM:no terminal library found错误解决办法

[31]VIM编辑器之神 可以通过Vundle来管理Vim插件

[32]关于开启VIM的Python支持

[33] 解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found问题

[44]Index of /debian/pool/main/g/gcc-4.9

[45]解决 /lib/libc.so.6: version `GLIBC_2.11′ not found