最近本人在看《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的配置内容:
     set nocompatible              " be iMproved, required
    filetype on " required " set the runtime path to include Vundle and initialize
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    " alternatively, pass a path where Vundle should install plugins
    "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required
    Plugin 'gmarik/Vundle.vim' " plugin from http://vim-scripts.org/vim/scripts.html
    Plugin 'L9'
    " Git plugin not hosted on GitHub
    " Plugin 'git://git.wincent.com/command-t.git'
    " git repos on your local machine (i.e. when working on your own plugin)
    " Plugin 'file:///home/gmarik/path/to/plugin'
    " The sparkup vim script is in a subdirectory of this repo called vim.
    " Pass the path to set the runtimepath properly.
    " Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
    " Avoid a name conflict with L9
    " Plugin 'user/L9', {'name': 'newL9'} " All of your Plugins must be added before the following line
    call vundle#end() " required
    filetype plugin indent on " required
    " To ignore plugin indent changes, instead use:
    "filetype plugin on
    "
    " Brief help
    " :PluginList - list configured plugins
    " :PluginInstall(!) - install (update) plugins
    " :PluginSearch(!) foo - search (or refresh cache first) for foo
    " :PluginClean(!) - confirm (or auto-approve) removal of unused plugins
    "
    " see :h vundle for more details or wiki for FAQ
    " 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里面修改该插件的打开命令按键映射及配置:
    let g:ctrlp_map = '<c-p>'     "hotkey Ctrl+p open ctrlp plugin
    let g:ctrlp_cmd = 'CtrlP'
    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里面修改该插件的命令按键映射及配置:
    map <F6> :CtrlPFunky<cr>
    let g:ctrlp_extensions = ['funky']
    let g:ctrlp_funky_syntax_highlight = 1 
  3. 保存被修改的配置文件,重新运行vim打开一个c源文件,按F6键即可看到当前文件的函数列表,上下键移动选择条目按回车即可跳到函数定义处

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

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

四、后记

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

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

map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
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. Python学习(006)-深浅拷贝及集合

     深浅拷贝 import copy husband=['xiaoxin',123,[200000,100000]] wife=husband.copy() #浅拷贝 wife[0]='xiaohong ...

  2. specified属性

  3. Ubuntu中敲写c语言步骤

    1.进入Ubuntu界面 1.1按快捷键 Ctrl + Alt + T: 1.2 安装vim:输入 sudo apt-get install vim: 1.3 安装gcc:输入 sudo apt-ge ...

  4. egret游戏入门之学习资源篇

    最近因需要,入手H5游戏. 写游戏当然需要有引擎. H5游戏开发:游戏引擎入门推荐 如何选择 H5 游戏引擎 白鹭引擎和layabox哪个好用,哪个技术更成熟 ? LayaBox 与 Egret 选择 ...

  5. 自定义$('#form').serialize() var params = $('#xxx_form').serializeObject();

    //注意:获取之前 $("#id").removeAttr("disabled"); $.fn.serializeObject = function () { ...

  6. C语言指针和操作系统的逻辑地址

    你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干.只有在Intel实模式下,逻辑地址才和物理地址相等 ...

  7. day32 多进程

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程. ...

  8. day31 python学习 并发编程之多进程理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): 二 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行 ...

  9. juc包下的集合类

    import java.util.Iterator;import java.util.concurrent.CopyOnWriteArrayList; /** * 集合在多线程中同步的方式: * 1. ...

  10. Nginx服务器抵御CC攻击的相关配置讲解

    CC攻击利用代理服务器向网站发送大量需要较长计算时间的URL请求,如数据库查询等,导致服务器进行大量计算而很快达到自身的处理能力而形成DOS.而攻击者一旦发送请求给代理后就主动断开连接,因??代理并不 ...