最近本人在看《TCP/IP Illustrated Volume2:The Implementation》这本书,自然要下载4.4BSD-Lite的源代码配合书本一起研读。以前学习Vim的时候就知道Vim可以通过插件的功能来配置一个功能强大的自定义IDE,这次有这么好的机会为什么不利用一下呢?于是在阅读源代码的过程中根据需要一步一步配置了一个简单完整的IDE环境,通过这几天的使用真心觉得Vim好用,速度那个快呀。以前总听别人说Vim如何如何好,这次真的让我感受到了并爱上了Vim这个工具。在这里强烈推荐没有尝试过的可以自己尝试下,下面来看看我是怎么一步步将Vim配置成一个功能基本齐全的IDE的。

一、准备工作

  1. 安装Git(因为下面我们选择的插件管理器需要使用到它)
  2. 安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步插件安装包到本地仓库(Vundle的默认本地仓库位置是~/.vim/bundle/)
  3. 通过Git下载Vundle安装包:$ git clone https://github.com/gmarik/Vundle.vim.git  ~/.vim/bundle/Vundle.vim
  4. 在~/.vimrc中添加Vundle的配置内容:
    1. set nocompatible " be iMproved, required
    2. filetype on " required
    3.  
    4. " set the runtime path to include Vundle and initialize
    5. set rtp+=~/.vim/bundle/Vundle.vim
    6. call vundle#begin()
    7. " alternatively, pass a path where Vundle should install plugins
    8. "call vundle#begin('~/some/path/here')
    9.  
    10. " let Vundle manage Vundle, required
    11. Plugin 'gmarik/Vundle.vim'
    12.  
    13. " plugin from http://vim-scripts.org/vim/scripts.html
    14. Plugin 'L9'
    15. " Git plugin not hosted on GitHub
    16. " Plugin 'git://git.wincent.com/command-t.git'
    17. " git repos on your local machine (i.e. when working on your own plugin)
    18. " Plugin 'file:///home/gmarik/path/to/plugin'
    19. " The sparkup vim script is in a subdirectory of this repo called vim.
    20. " Pass the path to set the runtimepath properly.
    21. " Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
    22. " Avoid a name conflict with L9
    23. " Plugin 'user/L9', {'name': 'newL9'}
    24.  
    25. " All of your Plugins must be added before the following line
    26. call vundle#end() " required
    27. filetype plugin indent on " required
    28. " To ignore plugin indent changes, instead use:
    29. "filetype plugin on
    30. "
    31. " Brief help
    32. " :PluginList - list configured plugins
    33. " :PluginInstall(!) - install (update) plugins
    34. " :PluginSearch(!) foo - search (or refresh cache first) for foo
    35. " :PluginClean(!) - confirm (or auto-approve) removal of unused plugins
    36. "
    37. " see :h vundle for more details or wiki for FAQ
    38. " Put your non-Plugin stuff after this line
  5. 有两种方式安装新插件,通过命令行参数的方式如:$ vim +PluginInstall +qall或者直接运行:$vim,然后按:PluginInstall进入命令模式,直到左下方状态栏出现Done!提示说明插件安装成功,退出再进入就可以使用我们在~/.vimrc中配置的插件了
  6. 安装ctags软件:$ yum install ctags

二、生成tags文件

    为了可以利用Vim本身提供的tag功能来定位程序里面出现的宏定义和方法定义(源文件之间跳转),在你的工程根目录运行命令:$ ctags -R --language-force=c++ *,这里语言要指定为c++,如果指定为c则不会生成.h文件的tag。操作成功后在当前目录就可以发现一个tags文件了,在~/.vimrc中添加一行配置信息如:set tags=/opt/dev/4.4BSD-Lite/tags来告诉vim tag索引文件的位置。再次运行vim就可以通过按Ctrl+]来快速跳转到光标下方的函数或宏的定义处,查看代码非常方便。通过[+d可以在vim状态栏显示当前文件中定义的宏的内容(不用跳转)

三、按需添加插件

(1)显示目录树插件(NERDTree)

  1. 在~/.vimrc的Plugin段中添加一行安装配置:Plugin 'scrooloose/nerdtree'
  2. 在~/.vimrc里面修改该插件的打开命令按键映射:map <F4> :NERDTree<cr>
  3. 保存被修改的配置文件,重新运行vim,如:$ vim /opt/dev
  4. 按F4功能键即可调用该插件显示当前工作目录的目录树,按?或者帮助信息,按q退出该插件(当打开多个tab时可以通过gt或窗口index+gt在tab之间快速切换,按T以安静方式打开新tab即打开新tab后继续留在当前tab)

(2)文件查找插件(CtrlP)

  1. 在~/.vimrc的Plugin段中添加一行安装配置:Plugin 'kien/ctrlp.vim'
  2. 在~/.vimrc里面修改该插件的打开命令按键映射及配置:
    1. let g:ctrlp_map = '<c-p>' "hotkey Ctrl+p open ctrlp plugin
    2. let g:ctrlp_cmd = 'CtrlP'
    3. let g:ctrlp_working_path_mode = '0' "disable work path mode
  3. 保存被修改的配置文件,重新运行vim,如:$ vim /opt/dev
  4. 按Ctrl+p即可调用该插件(每次运行第一次打开需要稍微等一下,该插件对工作目录进行扫描创建缓存,如果目录结构有变化按F5进行缓存刷新,我找了下没有发现保存扫描缓存的功能),按ESC退出该插件(Ctrl+t在新tab中打开选中的文件);:CtrlPMRU 在最近使用最多的文件里面查找结果;:CtrlPBuffer在find buffer里面查找结果;按..进入上一级目录中

(3)函数名列表(CtrlPFunky),该插件是CtrlP插件的一个扩展,必须先装CtrlP

  1. 在~/.vimrc的Plugin段中添加一行安装配置:Plugin 'tacahiroy/ctrlp-funky'
  2. 在~/.vimrc里面修改该插件的命令按键映射及配置:
    1. map <F6> :CtrlPFunky<cr>
    2. let g:ctrlp_extensions = ['funky']
    3. let g:ctrlp_funky_syntax_highlight = 1 
  3. 保存被修改的配置文件,重新运行vim打开一个c源文件,按F6键即可看到当前文件的函数列表,上下键移动选择条目按回车即可跳到函数定义处

(4)源文件中函数、变量、结构体、宏等元素的列表(taglist)

  1. 在~/.vimrc的Plugin段中添加一行安装配置:Plugin 'vim-scripts/taglist.vim'
  2. 在~/.vimrc里面修改该插件的命令按键映射及配置:
    1. map <F5> :Tlist<cr>
    2. let Tlist_Show_One_File = 1
    3. let Tlist_Exit_OnlyWindow = 1
    4. let Tlist_Use_Right_Window = 1
    5. let Tlist_GainFocus_On_ToggleOpen = 1
  3. 保存被修改的配置文件,重新运行vim打开一个c源文件,按F5键即可在右边子窗口看到当前文件的个元素的列表,上下键移动选择条目按回车即可跳到函数定义处,F1查看帮助信息,在选择的对象上按<space>可以在状态栏看到各元素的定义;按减号(-)关闭一个节点,按*打开关闭的结点

四、后记

  上面四个插件就是我当前阅读源代码的IDE配置,对于我来说已经足够满足我的工作需要了;由于这次时间仓促Vim里面还有很多人性化的配置及插件没来得及发现,随着我对Vim更深入的了解及在使用过程中遇到的新问题,还会有更多优秀的功能及插件,到时候再来分享。

为了方便的保存每次的工作状态及再次运行Vim的时候恢复上次工作状态需要在~/.vimrc中添加如下两行配置(也就是Vim的Session管理功能):

  1. map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
  2. map <F3> :source ~/vim_session <cr> " And load session with F3

通过Vim+少量插件配置一个高效简洁的IDE的更多相关文章

  1. [转载]一个高效简洁的Aseprite to Unity导入工具

    原文链接 https://zhuanlan.zhihu.com/p/28644268  期待原作者上传至AssetStore. 今天,我的第一个 Unity 插件 MetaSprite 正式发布了它的 ...

  2. 配置一个高效快速的Git环境

    username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...

  3. vim calendar插件配置

    近日学习markdown,试着记个日志,安装了vim的知名插件calendar:https://github.com/mattn/calendar-vim. 使用网上配置,发现回车之后日期是昨天的,于 ...

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

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

  5. Vim Vundle 插件管理器

    /********************************************************************** * Vim Vundle 插件管理器 * 说明: * 话 ...

  6. vim学习、各类插件配置与安装

    vim学习.各类插件配置与安装 vim 插件 配置 1. vim学习 vim基础学习:根据网上流行基础文章<简明Vim练级攻略>,进阶书籍<vim实用技巧>.注:进阶书籍可以在 ...

  7. vim学习、各类插件配置与安装【转】

    转自:https://www.cnblogs.com/forest-wow/p/6916531.html 1. vim学习 vim基础学习:根据网上流行基础文章<简明Vim练级攻略>,进阶 ...

  8. vim 插件配置博客记录

    本来打算自己写下各种经常使用vim的插件安装方法, 可是搜索了下, 发现别人都写过了, 在写一遍也没有意思, 特此记录. Vim 经常使用命令 http://blog.csdn.net/hittata ...

  9. VS下使用VIM, Visual Studio 安装 VSvim插件 配置 及使用

    简介 VIM是一款很高效的编辑工具,所幸的是VS2012以后支持VIM的插件:VsVim.下面介绍插件的安装.配置及简单使用. 1. 下载安装 去官网下载,双击直接安装后,重新打开VS. https: ...

随机推荐

  1. Root谷歌OnHub路由器

    Exploitee.rs极客小组因破解谷歌电视而成名,并且他们还发布了许多硬件相关的工具和exp.这次他们root了OnHub路由器.并发布在了他们的博客里. Google OnHub是谷歌于今年八月 ...

  2. ZEDGRAPH画图心得,SQL语句构造!!!

    /// <summary> /// 画折线 /// </summary> public void Drawline() { OleDbConnection odcConnect ...

  3. kindle看扫描版pdf的解决办法

    (1)先把PDF crop (2)转JPEG (3)JPEG根据kindle的屏幕的分辨率,调整JPEG图像大小,kindle whater paper 大小为1448*1072 (4)   最后把j ...

  4. C++/C 宏定义(define)中# ## 的含义 宏拼接

    C++/C 宏定义(define)中# ## 的含义 define 中的# ## 一般是用来拼接字符串的,但是实际使用过程中,有哪些细微的差别呢,我们通过几个例子来看看. #是字符串化的意思,出现在宏 ...

  5. SIM800C 透传模式

    /******************************************************************************* * SIM800C 透传模式 * 说明 ...

  6. OK335xS canutils deal with compile error

    /************************************************************************************** * OK335xS ca ...

  7. springboot整合jedisCluster

    maven依赖 springboot整合jedisCluster相当简单,maven依赖如下: <dependency> <groupId>org.springframewor ...

  8. BZOJ4836: [Lydsy1704月赛]二元运算【分治FFT】【卡常(没卡过)】

    Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使 ...

  9. POJ 2407:Relatives(欧拉函数模板)

    Relatives AC代码 Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16186   Accept ...

  10. jsp之response方法

    response简介 response对象:对客户端的请求作出回应,将Web服务器处理后的结果发回客户端. response对象:属于javax.servlet.HttpServletResponse ...