vim插件和配置

插件

pathogen 可以方便地管理vim插件

在没有pathogen的情况下,vim插件的文件全部都放在.vim目录,卸载插件很麻烦,pathogen可以将不同的插件放在一个单独的目录下,安装插件只需要将插件的文件夹复制到制定文件夹(bundle)内,卸载插件时只需要删除文件夹,方便好用。

以下插件都可以采用“下载zip包到vundle文件夹,解压zip包”的方法进行安装

下载及安装https://github.com/tpope/vim-pathogen

nerdtree 用于查看目录树

下载https://github.com/scrooloose/nerdtree

tabular 用于格式化代码

下载https://github.com/godlygeek/tabular

Tagbar 查看代码结构

下载https://github.com/majutsushi/tagbar

airline 用于设置vim主题

下载https://github.com/bling/vim-airline

molokai 用于设置vim主题

下载https://github.com/tomasr/molokai

mru 保存最近打开的文件

下载https://github.com/vim-scripts/mru.vim

easymotion 用于搜索

下载https://github.com/easymotion/vim-easymotion

ctrlp 强大的搜索插件

下载https://github.com/kien/ctrlp.vim

AutoComplPop 用于自动补全

下载https://github.com/vim-scripts/AutoComplPop

omnicppcomplete 用于自动补全

下载https://github.com/vim-scripts/OmniCppComplete

配置

基本配置

按键映射

按键映射的配置都写在.vimrc中,.vimrc放在主目录

  1. imap jk <ESC\> " 按jk退出编辑状态,再也不用小指头按Esc了
  2. map wq <ESC>:wq<CR> " wq就直接保存退出
  3. imap wq <ESC>:wq<CR> " 按wq就直接保存退出
  4. map qq <ESC>:q!<CR> " qq就直接不保存退出
  5. imap qq <ESC>:q!<CR> " 按qq就直接不保存退出
  6. map <F2> <ESC><C-W><C-W> " F2进行窗口切换,不按<C-W><C-W>
  7. map <F3> <ESC>:Tagbar<CR> " 按F3打开代码结构
  8. map <F4> <ESC>:NERDTreeToggle<CR>
  9. map <F12> <ESC>:!ctags -R --c++-kinds=+px --fields=+aiKSz --extra=+q .<CR> " F12生成tag

ctrlp按键映射

  1. map ,pp <ESC>:CtrlP<CR> "搜索文件
  2. map ,pd <ESC>:CtrlPDir<CR> "搜索文件夹
  3. map ,pu <ESC>:CtrlPUndo<CR> "搜索修改记录,可以回退
  4. map ,pl <ESC>:CtrlPLine<CR> "搜索行
  5. map ,pc <ESC>:CtrlPChangeAll<CR> "搜索修改记录,可以定位光标
  6. map ,pm <ESC>:CtrlPMRU<CR> "搜索最近修改的文件

补全

vim中的自动补全很麻烦,但是写代码没有自动补全完全无法接受。为了实现自动补全,我一开始使用omnicppcomplete和AutoComplPop,后来听说有个牛逼的插件叫做YouCompleteMe,可以进行语法分析,实现自动补全,于是我就去试试。我们的开发机无法访问外网,也不能直接用root用户下直接安装软件,安装YouCompleteMe确实麻烦。我先后用源码编译安装了cmake、llvm、python、vim和YouCompleteMe,花了不少时间,终于把YouCompleteMe装好了,不过使用的时候,补全还是不够智能,没有想象中那么好。后来搬到了新的开发机,不想再重新安装YouCompleteMe了,重新回到omnicppcomplete和AutoComplPop。最后我发现,omnicppcomplete和AutoComplPop实现的补全效果比YouCompleteMe好。几乎每个vim使用者都会面临自动补全的功能,在这里,我建议使用omnicppcomplete和AutoComplPop组合,简单方便,效果又好。

因为项目是使用blade build编译,BUILD记录了项目的依赖,于是我写了一个python脚本去分析BUILD文件,获取相应的依赖,再根据依赖去生成tag,提高代码补全能力。最终,vim的代码补全能力也不错!使用方法如下:

  1. 安装ctags、omnicppcomplete和AutoComplPop
  2. 在vim中添加一句配置:set tags+=./deps_tags
  3. 在BUILD所在目录下运行deps_tag.py脚本,根据依赖生成deps_tags
  4. 按F12生成本项目的tags
  5. 愉快地使用补全
  6. 这里其实可以做到每次保存文件都自动重新生成tags,但是因为tags是根据所在工作路径的,如果不是在项目路径就会生成没必要的tags

最后,欢迎使用我的vim配置

  1. " set coding
  2. set termencoding=utf-8
  3. set encoding=utf-8
  4. set fileencoding=utf-8
  5. set fenc=utf-8
  6. set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
  7. set backspace=indent,eol,start
  8. set nocompatible " be iMproved, required
  9. set mouse=a " mouse useful
  10. set nu " set number
  11. set nocp
  12. set nobackup " no backup
  13. set noerrorbells " no voice
  14. set showmatch " show match of () {} []
  15. set ignorecase " ignore case in search
  16. set cursorline " hightlight current line
  17. set cursorcolumn " hightlight current collum
  18. "set autochdir " auto change dir
  19. set autoindent " autoindent 是自动缩进, cindent是特别针对C语言语法自动缩进
  20. set smartindent
  21. set cindent
  22. set tabstop=4 " 制表符为4
  23. set softtabstop=4
  24. set shiftwidth=4
  25. set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离
  26. set cmdheight=2 " 命令行(在状态行下)的高度,默认为1,这里是2
  27. set statusline=%F%m%r%h%w[%p%%] " 我的状态行显示的内容
  28. set laststatus=2 " 总是显示状态行
  29. syntax on " 语法高亮
  30. " key map
  31. imap jk <ESC> " 按jk退出编辑状态
  32. map wq <ESC>:wq<CR>
  33. imap wq <ESC>:wq<CR>
  34. map qq <ESC>:q!<CR>
  35. imap qq <ESC>:q!<CR>
  36. map cp <ESC>:set mouse=c<CR>:set nonu<CR>
  37. map ncp <ESC>:set mouse=a<CR>:set nu<CR>
  38. map ,pa <ESC>:set paste<CR>
  39. map ,np <ESC>:set nopaste<CR>
  40. map gn <ESC>:tabnext<CR>
  41. map gm <ESC><C-W><C-W>
  42. map <F2> <ESC><C-W><C-W>
  43. map <F3> <ESC>:Tagbar<CR>
  44. map <F4> <ESC>:NERDTreeToggle<CR>
  45. map <F12> <ESC>:!ctags -R --c++-kinds=+px --fields=+aiKSz --extra=+q .<CR>
  46. "pathogen
  47. filetype off " required
  48. call pathogen#infect()
  49. filetype plugin on
  50. "theme
  51. syntax enable
  52. set t_Co=256
  53. let g:airline_theme="dark"
  54. set background=dark
  55. colorscheme molokai
  56. "let g:AutoOpenWinManager = 1
  57. let g:NERDTreeDirArrows = 1
  58. let g:nerdtree_tabs_autoclose = 0
  59. let g:bufExplorerSplitVertSize = 30
  60. let g:bufExplorerMaxHeight=30
  61. let g:winManagerWindowLayout = "FileExplorer|BufExplorer"
  62. let g:winManagerWidth = 30
  63. "easymotion
  64. map / <Plug>(easymotion-sn)
  65. omap / <Plug>(easymotion-tn)
  66. map n <Plug>(easymotion-next)
  67. map N <Plug>(easymotion-prev)
  68. map <Leader>l <Plug>(easymotion-lineforward)
  69. map <Leader>j <Plug>(easymotion-j)
  70. map <Leader>k <Plug>(easymotion-k)
  71. map <Leader>h <Plug>(easymotion-linebackward)
  72. let g:EasyMotion_use_upper = 1 " Use uppercase target labels and type as a lower case
  73. let g:EasyMotion_smartcase = 1 " type `l` and match `l`&`L`
  74. let g:EasyMotion_use_smartsign_us = 1 " Smartsign (type `3` and match `3`&`#`)
  75. "easygrep
  76. let g:EasyGrepMode = 2 " All:0, Open Buffers:1, TrackExt:2
  77. "let g:EasyGrepCommand = 0 " Use vimgrep:0, grepprg:1
  78. let g:EasyGrepRecursive = 1 " Recursive searching
  79. let g:EasyGrepIgnoreCase = 1 " not ignorecase:0
  80. let g:EasyGrepFilesToExclude = "*.bak, *~, cscope.*, *.a, *.o, *.pyc, *.bak"
  81. "let g:EasyGrepOpenWindowOnMatch = 0
  82. "ctrlp
  83. let g:ctrlp_by_filename = 1
  84. let g:ctrlp_working_path_mode = '0'
  85. "let g:ctrlp_cmd = 'CtrlPMixed'
  86. let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:10,results:20'
  87. "let g:ctrlp_regexp = 0
  88. let g:ctrlp_extensions = ['buffertag', 'dir', 'undo', 'line', 'changes', 'mixed', 'bookmarkdir']
  89. map ,pp <ESC>:CtrlP<CR>
  90. map ,pd <ESC>:CtrlPDir<CR>
  91. map ,pu <ESC>:CtrlPUndo<CR>
  92. map ,pl <ESC>:CtrlPLine<CR>
  93. map ,pc <ESC>:CtrlPChangeAll<CR>
  94. map ,pb <ESC>:CtrlPBookmarkDir<CR>
  95. map ,pm <ESC>:CtrlPMRU<CR>
  96. "acp
  97. let g:acp_enableAtStartup = 1
  98. let g:acp_completeoptPreview = 0
  99. let g:acp_ignorecaseOption = 1
  100. let g:acp_behaviorKeywordCommand = "\<C-p>"
  101. let g:acp_behaviorKeywordLength = 1
  102. "omnicppcomplete
  103. let OmniCpp_MayCompleteDot = 1 " autocomplete with .
  104. let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
  105. let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
  106. let OmniCpp_SelectFirstItem = 2 " select first item
  107. let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
  108. let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
  109. let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
  110. let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
  111. let OmniCpp_DefaultNamespaces=["std"]
  112. " au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif " 自动关闭补全窗口
  113. set completeopt=menu,longest
  114. set tags+=./deps_tags

vim插件和配置的更多相关文章

  1. Linux c++ vim环境搭建系列(4)——vim插件安装配置使用

    4. 插件 主要是c++相关的. ~/.vimrc文件在GitHub上有:https://github.com/whuwzp/vim_config 以下内容参考: https://github.com ...

  2. vim插件minibuf配置

    1.去下载网站下载minibufexpl.vim文件放入到~/vim/plugins中,有的系统路径是~/.vim/plugins; 下载网址如下 https://www.vim.org/script ...

  3. 「个人vim插件+配置」

    2016.10.4 filetype indent on syntax on set nu ai ci si set sw= ts= set autochdir set backspace= colo ...

  4. DoxygenToolKit.vim 插件配置

    如何才能既享受 Doxygen 的强大功能,同时又避免大量的重复性的注释内容? 解决思路: 让编辑器来替我们写那些格式和内容固定的部分,我们只负责写真正的有效内容. 所以,答案就是:Vim + Dox ...

  5. vim插件管理器的安装和配置-windows

    # vim插件管理器的安装和配置-windows ### 前言------------------------------ vim做一框功能强大的编辑器,扩展功能令人称奇,插件机制非常灵活- 本篇推荐 ...

  6. vim 插件配置博客记录

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

  7. vim插件配置

    OS:kali linux tool:vim 上图: 0x00 需要用到的插件及其下载地址 左边的一栏显示文件目录结构的用到的插件为 NERDTree 下载地址:https://github.com/ ...

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

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

  9. VIM插件攻略

    工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话...不过,我想一定有很多跟我一样打算进入Linux平台开发的新手,一开始都为找不到一个像Windows下的VS那样 ...

随机推荐

  1. Surprising Strings(map类)

    http://poj.org/problem?id=3096 题意容易理解,开始直接暴力,还是用map写下吧,熟练一下: #include<stdio.h> #include<str ...

  2. linux配置端口转发

    一.使用rinted进行端口转发 将10.50.13.13 80请求转到10.50.13.11 80上 1.安装rinetd $ tar zxf rinetd.tar.gz $ cd rinetd $ ...

  3. 高等数学(拉格朗日乘子法):NOI 2012 骑行川藏

    [NOI2012] 骑行川藏 输入文件:bicycling.in   输出文件:bicycling.out   评测插件 时间限制:1 s   内存限制:128 MB NOI2012 Day1 Des ...

  4. JavaScript引擎研究与C、C++与互调用(转)

    本文转自:ice6015的专栏.为什么有些招聘需要熟悉JS和C++,这或许就是原因. 1.  概要 JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML ...

  5. Introduction to Glide, Image Loader Library for Android, recommended by Google

    In the passed Google Developer Summit Thailand, Google introduced us an Image Loader Library for And ...

  6. CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站

    CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站 CLOSE-UP FORMA ...

  7. + (void)load和+ (void)initialize有什么用处

    两个方法都可以进行一些类的初始化操作.其中有些小区别.+(void)load 方法只要加入了工程种,进行了编译,且.m中实现了这个方法,都会调用一次,值得注意的时没实现的子类是不会调用的,就算父类实现 ...

  8. C++中的类和对象(一)

    一,类的概念及封装 1.什么是封装 第一层含义:封装是面向对象程序设计最基本的特性.把数据(属性)和函数(方法)合成一个整体,这在计算机世界中是用类和对象实现的.(把属性和方法进行封装) 第二层含义: ...

  9. 通过cocos2d-x的CCGLProgram和CCShaderCache的实现来分析OpenGL ES中的Shader编程

    在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shad ...

  10. android string.xml里的空格字符

    在string.xml定义字符串的时候常常要用到空格, 直接用键盘敲的话不知道是几个空格,常常看错了,导致误删. 假设用 来替代空格的话,就好非常多. 另外使用%1$s,%1$d能够在一个字符串里定义 ...