把vim打造成牛逼的C++ IDE

来源:互联网 发布:mac唇膏真假对比 编辑:程序博客网 时间:2024/05/16 19:35

把vim打造成牛逼的C++ IDE

对于windows上做C++开发的用户来说,vs为他们做了大量的工作,语法高亮、自动缩进、智能提示等等,当你happy的使用vs时,请记住一点,这是一个收费软件,虽然在我大中华普遍都在使用微软的盗版软件,但作为程序员我们心里应该知道这是不对的行为,然后再去——等等,我们今天讨论的不是这个话题,我们要说的是Linux下的免费软件vim!

vim插件安装的教程在互联网上已经数不胜数,但是质量也参差不齐,很多都是在其它地方转载copy,而且没有注明使用环境,很多人安装时发现无法work,最后搞得一团糟,今天这篇文章的宗旨只有两个:1、使得安装简单;2、保证可以用。

阅读这篇文章的前提是你至少使用过vim,知道基本的操作。下面就开始进入主题。

准备工作

由于大多数vim插件都可以在github上找到,而且通过Git安装、删除、升级插件都异常简单,因此我们需要首先安装git工具,如果不知道git和github,可以先自行Google

centos安装

sudo yum install git

ubuntu安装

sudo apt-get install git

Mac安装
由于Mac没有像yum和apt-get一样的包管理工具,需要先安装一个类似的包管理工具,这对于安装一些Linux命令是非常有帮助的

  1. 安装包管理工具homebrew
     ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
  2. 通过brew安装git
     brew install git

我将本文需要安装的插件和配置文件都放在了github上,如果你不想大费周折的了解每个插件的安装方式,可以直接下载所有插件即可使用,项目地址https://github.com/handy1989/vim,可以按照如下命令备份并一次安装所有插件(注意,从git上下载的vim目录下都是隐藏文件,ls -a可以查看)

mv ~/.vimrc ~/.vimrcbakmv ~/.vim ~/.vimbakgit clone https://github.com/handy1989/vim.gitmv vim/.vimrc ~/.vim ~/

第一个插件pathogen

为了不让插件安装后目录显得凌乱,我们很有必要安装一个管理插件的插件,这样功能的插件有好几个,这里只推荐一个pathogen

项目地址
https://github.com/tpope/vim-pathogen

安装
可以通过git安装,也可以直接下载插件文件,由于这个插件只有一个文件,我们选择后者,而该插件的说明文档上也是用的这种方法。

mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

然后,就没有然后,这个插件就安装完了。是不是觉得so easy! 不过先别急,我们还要对插件进行一些配置,用vim打开~/.vimrc,输入如下三行类容

execute pathogen#infect()syntax onfiletype plugin indent on

保存退出,这个插件的安装配置就完成了,怎么验证插件有没有生效呢,别急,后面有的是机会验证。我们先来讲讲vim插件是个什么东西。

此时你的~/.vim目录结构应该是这样的

├── autoload│   └── pathogen.vim└── bundle

可见~/.vim目录下是有两个目录,其中autoload放的是pathogen插件,所谓的插件其实就是一个脚本,当vim启动时,它会自动加载~/.vim/autoload目录下的脚本,由于你~/.vimrc里配置了execute pathogen#infect(),所以它会去自动的执行脚本里这个函数,至于这个函数是怎么实现的,我们不用管它,总之这个函数的功能就是去加载~/.vim/bundle目录下你安装的所有插件,pathogen的管理方法大致就是这样,而我们也看到,vim的插件其实就是一个脚本文件,丰富一点的还会带有说明文档等其它内容,后面我们碰到了再讲解。

auto-pairs

项目地址
https://github.com/jiangmiao/auto-pairs(感兴趣的可以看)

功能
自动匹配括号、引号等

安装

git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pairs

这样就将auto-pairs在github上的项目文件下载到了~/.vim/bundle/auto-pairs目录下

测试
随便打开一个文件,输入左括号’(‘,看右括号是不是自动出现了,然后删除左括号,看右括号是不是也被删除了。当然功能远不止这些,但常用的就这几点。

NERDTree

项目地址
https://github.com/scrooloose/nerdtree

功能
显示目录树

安装

git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle

此时~/.vim/bundle/nerdtree下应该有如下几个目录和文件

autoloaddoclibnerdtree_pluginpluginREADME.markdownsyntax

这几个目录是vim默认的插件目录,如果我们不是通过pathogen加载插件,就需要在~/.vim目录下创建对应的这几个目录,并将NERDTree对应的文件拷到相应的目录,这样每个目录下会放置多个插件的内容,比如~/.vim/doc下就会放置所有插件的帮组文档,而我们通过pathogen来管理,每个插件的所有内容都放在同一个目录中,比如这里的NERDTree插件的内容我们下载到了~/.vim/bundle/nerdtree下,直接删除这个目录即可删除插件,如果后续插件有更新,在该目录下通过git命令也可以很容易更新到最新版本。

打开vim,在命令行模式下输入:Helptags载入插件的帮组文档,或者用:helptags help_dir载入指定目录的帮组文档,其中help_dir是你需要加载的插件帮组文档所在的目录,比如这里是~/.vim/bundle/nerdtree/doc

测试
用vim打开一个文件,在命令行模式下输入:NERDTree,然后回车,窗口左侧就出现了vim工作目录的目录树,如下图所示

将光标置于NERDTree窗口,按’?’可查看帮助,NERDTree的操作很简单,通常是将光标置于一个目录/文件上,通过一个按键来操作,下面列出几个常用按键及其对应的操作

文件相关操作o  : 在光标所在的上一个窗口打开文件,并将光标置于新打开的窗口go : 预览文件,光标停留在NERDTree窗口中t  : 在新标签中打开文件并激活gt : 在新标签打开文件,光标留在NERDTree窗口中i  : 水平分割打开文件gi : 水平分割预览s  : 垂直分割打开文件gs : 垂直分割预览目录树相关操作o  : 展开/关闭目录O  : 递归展开目录。慎用,如果目录层级多,打开会很慢x  : 关闭父目录C  : 切换光标所在目录为根目录u  : 切换目录树的根目录为上层目录U  : 切换目录树的根目录为上层目录,并保持旧的目录树的状态r  : 刷新当前目录R  : 刷新当前根目录(这个在新加入文件后会用到)cd : 切换vim工作目录为光标所在目录(命令模式下:pwd可查看当前工作目录)

为了方便打开NERDTree,我们可以设置快捷键,打开~/.vimrc,插入如下一行

map <C-n> :NERDTree<CR>

这样,当打开vim时,只要输入ctrl+n即可打开NERDTree

MiniBufExplorer

项目地址
http://www.vim.org/scripts/script.php?script_id=159

功能
显示已打开的buffer

安装
以6.3.2版本为例,根据项目地址可以找到对应版本的下载链接

mkdir -p ~/.vim/bundle/minibufexplorer/plugin && wget "http://www.vim.org/scripts/download_script.php?src_id=3640" -O ~/.vim/bundle/minibufexplorer/plugin/minibufexpl.vim

测试
用vim打开一个文件,此时看不到minibufexplorer窗口,因为默认是只有一个buffer时不显示窗口的,在命令行模式下通过:vsp filename打开另一个文件(或者用NERDTree浏览打开其它文件),看看此时窗口上方是不是出现了MiniBufExplorer的窗口,如下所示

我们先来解释一下什么叫buffer,vim为每个打开的文件都创建了一个buffer,这个buffer存储在内存中,为了下次打开文件时快速加载,比如我们通过NERDTree浏览并打开了多个文件,即便某些文件你退出了编辑,它的buffer仍旧是存在的,在命令模式下,我们输入:ls可以查看打开的buffer列表,每一行前面的数字对应buffer的编号,通过输入:b N,其中N代表buffer编号,可以打开对应的buffer。对应上面的截图,我们打开了两个文件,此时minibufexplorer窗口显示有两个buffer,即便我们关闭一个文件,这两个buffer仍然存在,将光标移到某个buffer的名称上,回车可打开对应的buffer,按d可删除buffer,具体的操作可以直接阅读插件文件,路径为~/.vim/bundle/minibufexplorer/plugin/minibufexpl.vim

配置
在~/.vimrc文件中加入如下命令

let g:miniBufExplMaxSize = 2

该配置含义为minibufexplorer窗口最大高度为2行,默认是没有上限的,你打开的buffer足够多,一会一直增长下去,为了方便阅读我一般将它设为2,其它配置不怎么用到,需要用的时候可以参考插件文件,并在~/.vimrc中添加配置

ctags+taglist+omnicppcomplete

接下来就到了重磅戏了,前面还只是一些窗口相关的基本操作,是为了方便浏览文件,我们阅读C++代码时希望能快速定位函数、变量,类似于VS等其它IDE提供的功能

ctags

这个并不是插件,而是可执行程序,是用来对代码建索引,方便查找的,有些Linux版本是自带ctags的,如果没有,按如下方式安装

sudo yum install ctags

ubuntu安装方式

sudo apt-get install ctags

mac也是自带ctags的,但是那个不好用,可以重新安装

brew install ctags

如果安装失败,看是不是因为/usr/bin/ctags文件已经存在,可以先mv走,然后再执行

创建索引:在你代码的根目录执行如下命令,会生成一个tags文件,此时在代码根目录下打开一个文件(vim默认只加载工作目录下的tags文件),将光标置于一个函数或结构体名字上,按ctr+]即可跳转到该名称的定义处,如果出现多个选项,可以输入编号选择对应跳转的地方,按ctr+o可回到光标之前的位置

ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

taglist

taglist是vim的一个插件,可以将代码内的函数、变量等按规律列出来,方便查找

下载地址
http://www.vim.org/scripts/script.php?script_id=273,或者直接按如下方式下载并安装

cd ~/.vim/bundle && wget "http://www.vim.org/scripts/download_script.php?src_id=19574" -O taglist.zip && unzip taglist.zip -d taglist

这样就生成了~/.vim/bundle/taglist目录,该目录的结构为

taglist├── doc│   └── taglist.txt└── plugin    └── taglist.vim

其中plugin目录下为插件文件,doc目录下为说明文档。打开vim,在命令行模式下输入:helptags ~/.vim/bundle/taglist/doc可以加载说明文档,然后输入help taglist.txt则可以显示说明文档

配置
打开~/.vimrc,输入如下内容

let Tlist_Show_One_File=1    " 只展示一个文件的taglistlet Tlist_Exit_OnlyWindow=1  " 当taglist是最后以个窗口时自动退出let Tlist_Use_Right_Window=1 " 在右边显示taglist窗口let Tlist_Sort_Type="name"   " tag按名字排序

这几行配置看名字就能知道什么意思,引号后边是说明,在vim配置文件里,双引号代表注释,类似于C语言里的/

如果打开过程中出现问题,例如

Taglist: Failed to generate tags for /Users/Zorba/Dropbox/RubymineProjects/rcafe/app/controllers/posts_controller.rb /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ctags: illegal option – -^@usage:  
ctags [-BFadtuwvx] [-f tagsfile] file …^@  

就要重新安装一遍ctags

<p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="white-space:pre"></span>brew install ctags-exuberant<br></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">```</span></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">测试</span><br>打开一个文件,在命令行模式下输入<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">:TlistToggle</code>即可显示taglist窗口,配合NERDTree一起效果如下<br><img alt="" src="http://littlewhite.us/pic/taglist.png" style="padding:0px; border:0px; vertical-align:baseline; max-width:100%"></p><h3 style="padding:0px; border:0px; font-size:1.402857143rem; vertical-align:baseline; clear:both; margin:0.514285714rem 0px; line-height:1.846153846; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><a name="t8"></a>OmniCppComplete</h3><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">这是一个对C++进行语法补全的插件,可以对函数、命名空间、类成员等进行补全,使用起来和绝大多数IDE差不多,不一样的是IDE为你做了很多你不知道的事情,而omni补全需要依赖tags文件,需要你用ctags命令自己生成</p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">下载地址</span><br><a target="_blank" href="http://www.vim.org/scripts/script.php?script_id=1520" style="padding:0px; border:0px; vertical-align:baseline; outline:none; color:rgb(159,159,159)">http://www.vim.org/scripts/script.php?script_id=1520</a></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">也可用如下命令直接下载并安装</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">cd ~/.vim/bundle &amp;&amp; wget "http://www.vim.org/scripts/download_script.php?src_id=7722" -O omnicppcomplete.zip &amp;&amp; unzip omnicppcomplete.zip -d omnicppcomplete</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">该命令会生成~/.vim/bundle/omnicppcomplete目录,目录结构为</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">├── after│&nbsp;&nbsp; └── ftplugin│&nbsp;&nbsp;     ├── cpp.vim│&nbsp;&nbsp;     └── c.vim├── autoload│&nbsp;&nbsp; └── omni│&nbsp;&nbsp;     ├── common│&nbsp;&nbsp;     │&nbsp;&nbsp; ├── debug.vim│&nbsp;&nbsp;     │&nbsp;&nbsp; └── utils.vim│&nbsp;&nbsp;     └── cpp│&nbsp;&nbsp;         ├── complete.vim│&nbsp;&nbsp;         ├── includes.vim│&nbsp;&nbsp;         ├── items.vim│&nbsp;&nbsp;         ├── maycomplete.vim│&nbsp;&nbsp;         ├── namespaces.vim│&nbsp;&nbsp;         ├── settings.vim│&nbsp;&nbsp;         ├── tokenizer.vim│&nbsp;&nbsp;         └── utils.vim└── doc    └── omnicppcomplete.txt</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">打开vim,在命令行模式下输入<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">:helptags ~/.vim/bundle/omnicppcomplete/doc</code>即可加载说明文档,输入<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">:help omnicppcomplete</code>查看说明文档</p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">配置</span><br>打开~/.vimrc文件,输入</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">filetype plugin indent onset completeopt=longest,menulet OmniCpp_NamespaceSearch = 2     " search namespaces in the current buffer   and in included fileslet OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表let OmniCpp_MayCompleteScope = 1    " 输入 :: 后自动补全let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">测试</span><br>前面说过,omni插件的补全是依赖于tags文件的,因此需要我们手动建立tags文件,假设现在有两个文件hello.h和hello.cpp如下<br><img alt="" src="http://littlewhite.us/pic/omni_hello.png" style="padding:0px; border:0px; vertical-align:baseline; max-width:100%"></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">我们在和这两个文件所在的目录输入</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">这样就生成了tags文件,然后我们打开main.cpp来测试,当输入hello.h和hello.cpp中的函数或结构体时,通过按<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">ctr+x ctr+o</code>就可以自动补全了,效果如下<br><img alt="" src="http://littlewhite.us/pic/omni_main.png" style="padding:0px; border:0px; vertical-align:baseline; max-width:100%"></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">通过按ctr+n和ctr+p可以对候选项进行上下选择。通过这种方式可以实现对函数、结构体的补全</p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">对STL补全</span><br>上面的方式只能对自己的代码进行补全,是当我们要使用其它库比如STL甚至是第三方库时就无法补全,原因很简单,我们只对自己的代码建立了tags文件,想要对其它库进行补全,就必须对它们的源代码建立tags文件,所幸的是vim的插件编写者们早已解决了这个需求,并且他们专门针对STL头文件进行了修改,以便能更好的适应omni的补全,首先下载STL源代码,地址为<a target="_blank" href="http://www.vim.org/scripts/script.php?script_id=2358" style="padding:0px; border:0px; vertical-align:baseline; outline:none; color:rgb(159,159,159)">http://www.vim.org/scripts/script.php?script_id=2358</a>,可通过如下命令下载并解压</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">mkdir -p ~/.vim/tags &amp;&amp; cd ~/.vim/tags &amp;&amp; wget "http://www.vim.org/scripts/download_script.php?src_id=9178" -O - | tar jxvf -</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">这样就将STL的源码下载到了~/.vim/tags/cpp_src目录下,我们在该目录下执行ctags命令</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">这样就生成了~/.vim/tags/cpp_src/tags这个文件,然后打开~/.vimrc进行如下设置</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">set tags+=~/.vim/tags/cpp_src/tags</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">该命令是设置tags文件的搜索路径,默认只有vim工作目录的tags文件,这样设置之后就会同时加载指定目录的tags文件,你可以在后面添加更多其它第三方库的tags文件,现在对STL的补全效果如下</p><div align="center" style="padding:0px; border:0px; font-size:14px; vertical-align:baseline; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif; line-height:24px"><img alt="" src="http://littlewhite.us/pic/omni_stl.png" style="padding:0px; border:0px; vertical-align:baseline; max-width:100%"></div><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">omnicppcomplete的补全设置虽然麻烦,但也让我们更加清楚了插件是怎样工作的,作为程序员,至少应该对某些东西的工作原理搞清楚,而不是像使用IDE一样不管任何东西,你想自定义一下东西也无从下手。</p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">omnicppcomplete触发补全需要用到<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">ctr+x ctr+o</code>,显然这是不友好的,熟悉Linux命令行的人一定对shell命令的补全印象深刻,只需要按一下TAB键就可以进行补全,vim插件的强大之处在于,它可以实现你几乎所有的需求,想要用TAB键进行补全,就需要用到SuperTab</p><h3 style="padding:0px; border:0px; font-size:1.402857143rem; vertical-align:baseline; clear:both; margin:0.514285714rem 0px; line-height:1.846153846; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><a name="t9"></a>SuperTab</h3><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">项目地址</span><br><a target="_blank" href="https://github.com/ervandew/supertab" style="padding:0px; border:0px; vertical-align:baseline; outline:none; color:rgb(159,159,159)">https://github.com/ervandew/supertab</a></p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">安装</span><br>使用git进行安装是最方便的</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">cd ~/.vim/bundle &amp;&amp; git clone https://github.com/ervandew/supertab.git</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><span style="padding:0px; border:0px; vertical-align:baseline">测试</span><br>无需任何配置即可使用,这时你想要补全变量名或函数名只需按一下TAB键即可,出现候选窗口之后也可以用TAB键进行选择,这样是不是方便了很多!</p><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">由于TAB键被映射成了补全快捷键,也就无法通过TAB键直接输入制表符,这时如果想要输入制表符可以通过<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">ctr+v TAB</code>即可,即先输入ctr+v再输入TAB键,在vim下通过ctl+v可以输入很多不可见字符,比如试试<code style="padding:0px 5px; border:1px solid rgb(234,234,234); font-size:12px; vertical-align:baseline; margin:0px 2px; white-space:nowrap; background-color:rgb(248,248,248)">ctr+v ctr+w</code></p><h2 style="padding:0px; border-width:0px 0px 1px; border-bottom-style:solid; border-bottom-color:rgb(204,204,204); font-size:1.605714286rem; vertical-align:baseline; clear:both; margin:0.514285714rem 0px; line-height:1.6; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><a name="t10"></a>最终的配置文件</h2><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">装了这么多插件,在配置文件~/.vimrc里也增添了不少内容,最后你的配置文件至少应该包含以下内容</p><pre style="padding:6px 10px; border:1px solid rgb(204,204,204); font-size:13px; vertical-align:baseline; line-height:19px; overflow:auto; color:rgb(68,68,68); background-color:rgb(248,248,248)"><code style="padding:0px; border:none; vertical-align:baseline; margin:0px; background:transparent">set tags+=~/.vim/tags/cpp_src/tags   " 设置tags搜索路径syntax onfiletype plugin indent onmap &lt;C-n&gt; :NERDTree&lt;CR&gt;" pathongenexecute pathogen#infect()" taglistlet Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow=1let Tlist_Use_Right_Window=1let Tlist_Sort_Type="name"" omnicppcompleteset completeopt=longest,menulet OmniCpp_NamespaceSearch = 2     " search namespaces in the current buffer and in included fileslet OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表let OmniCpp_MayCompleteScope = 1    " 输入 :: 后自动补全let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]</code></pre><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">这个配置文件全都是和插件相关的配置,你还可以在里面添加其它配置来灵活定制你的vim,由于本文主要介绍插件相关内容,就不展开介绍了</p><h2 style="padding:0px; border-width:0px 0px 1px; border-bottom-style:solid; border-bottom-color:rgb(204,204,204); font-size:1.605714286rem; vertical-align:baseline; clear:both; margin:0.514285714rem 0px; line-height:1.6; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><a name="t11"></a>总结</h2><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">vim的C++开发环境到此就配好了,总的来说我们安装了这么几类插件</p><ol style="padding:0px; border:0px; font-size:14px; vertical-align:baseline; list-style-position:outside; margin:0px 0px 1.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif"><li style="padding:0px; border:0px; vertical-align:baseline; margin:0px 0px 0px 2.571428571rem">管理插件的插件</li><li style="padding:0px; border:0px; vertical-align:baseline; margin:0px 0px 0px 2.571428571rem">管理窗口和buffer</li><li style="padding:0px; border:0px; vertical-align:baseline; margin:0px 0px 0px 2.571428571rem">语法增强</li><li style="padding:0px; border:0px; vertical-align:baseline; margin:0px 0px 0px 2.571428571rem">代码补全</li></ol><p style="padding-top:0px; padding-bottom:0px; border:0px; font-size:14px; vertical-align:baseline; margin-top:0px; margin-bottom:0.714285714rem; line-height:24px; color:rgb(68,68,68); font-family:'Open Sans',Helvetica,Arial,sans-serif">通过这些插件我们可以将vim打造成一个好用的IDE,虽然经过了很多周折,但这些功夫都不会白费,一来我们可以通过这些插件了解IDE的一些工作原理,二来通过这些插件的安装我们也更加了解了vim插件的使用方法,有了这些基础,后续如果想满足一些个性化的需求,岂不易哉!</p><br><p><br></p><p><br></p><p><br></p><p><br></p><p>reference:</p><p>http://littlewhite.us/archives/212<br></p><p>http://helloruby.5oclock.io/2015/01/25/taglist/<br></p><p>http://www.runtime-era.com/2012/05/exuberant-ctags-in-osx-107.html<br></p><p><br></p></div>本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:- **Markdown和扩展Markdown简洁的语法**- **代码块高亮**- **图片链接和图片上传**- ***LaTex*数学公式**- **UML序列图和流程图**- **离线写博客**- **导入导出Markdown文件**- **丰富的快捷键**-------------------## 快捷键 - 加粗    `Ctrl + B`  - 斜体    `Ctrl + I`  - 引用    `Ctrl + Q` - 插入链接    `Ctrl + L` - 插入代码    `Ctrl + K` - 插入图片    `Ctrl + G` - 提升标题    `Ctrl + H` - 有序列表    `Ctrl + O` - 无序列表    `Ctrl + U` - 横线    `Ctrl + R` - 撤销    `Ctrl + Z` - 重做    `Ctrl + Y`## Markdown及扩展> Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。    —— <a href="https://zh.wikipedia.org/wiki/Markdown" target="_blank"> [ 维基百科 ]使用简单的符号标识不同的标题,将某些文字标记为**粗体**或者*斜体*,创建一个[链接](http://www.csdn.net)等,详细语法参考帮助?。本编辑器支持 **Markdown Extra** ,  扩展了很多好用的功能。具体请参考[Github][2].  ### 表格**Markdown Extra** 表格语法:项目     | 价格-------- | ---Computer | $1600Phone    | $12Pipe     | $1可以使用冒号来定义对齐方式:| 项目      |    价格 | 数量  || :-------- | --------:| :--: || Computer  | 1600 元 |  5   || Phone     |   12 元 |  12  || Pipe      |    1 元 | 234  |###定义列表**Markdown Extra** 定义列表语法:项目1项目2:   定义 A:   定义 B项目3:   定义 C:   定义 D    > 定义D内容### 代码块代码块语法遵循标准markdown代码,例如:``` python@requires_authorizationdef somefunc(param1='', param2=0):    '''A docstring'''    if param1 > param2: # interesting        print 'Greater'    return (param2 - param1 + 1) or Noneclass SomeClass:    pass>>> message = '''interpreter... prompt'''<div class="se-preview-section-delimiter"></div>

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

  • 把vim打造成牛逼的C IDE
    • 准备工作
    • 第一个插件pathogen
    • auto-pairs
    • NERDTree
    • MiniBufExplorer
    • ctagstaglistomnicppcomplete
      • ctags
      • taglist
      • 脚注
      • 目录
      • 数学公式
      • UML 图
    • 离线写博客
    • 浏览器兼容

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为:Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

张三->李四: 嘿,小四儿, 写博客了没?Note right of 李四: 李四愣了一下,说:李四-->张三: 忙得吐血,哪有时间写。<div class="se-preview-section-delimiter"></div>

或者流程图:

Created with Raphaël 2.1.0开始我的操作确认?结束yesno
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入

0 0
原创粉丝点击