VIM的强大除了快捷键以外,就是可以自行对其进行配置或添加插件,本文对配置及插件使用进行了入门介绍,领进门后各自修行,推荐查阅自带的文档

Vim本身的系统配置文件夹是在/usr/share/vim//etc/vim/两个文件夹下,这里的配置文件影响所有用户。一般情况下,我们不会去改变这两个文件夹下的配置文件,而是修改用户自己的配置文件 ~/.vimrc,会覆盖全局的配置文件

VIM配置


基础配置

“后面跟的是注释

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
set nu   "显示行号"
set ignorecase   "搜索模式里忽略大小写"
set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase'"
" 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
" set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个
"" :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
" set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用
" noautoindent "取消设置
" set smartindent " 智能对齐方式
" set tabstop=4 " 设置制表符(tab键)的宽度
" set softtabstop=4 " 设置软制表符的宽度
" set shiftwidth=4 " (自动) 缩进使用的4个空格
" set cindent " 使用 C/C++ 语言的自动缩进方式
" set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
" 设置C/C++语言的具体缩进方式
" set backspace=2 " 设置退格键可用
" set showmatch " 设置匹配模式,显示匹配的括号
" set linebreak " 整词换行
" set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
" set hidden " Hide buffers when they are abandoned
" set mouse=a " Enable mouse usage (all modes) 使用鼠标
" set number " Enable line number 显示行号
" set previewwindow " 标识预览窗口
" set history=50 " set command history to 50 历史记录50条
"
"
" "--状态行设置--
" set laststatus=2 "
" 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
" set ruler "
" 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"
" "--命令行设置--
" set showcmd " 命令行显示输入的命令
" set showmode " 命令行显示vim当前模式
"
" "--find setting--
" set incsearch " 输入字符串就显示匹配点
" set hlsearch

主题及展示

set fileformats=unix,dos
set background=dark "背景颜色,很多主题如果背景颜色不同出来的效果完全不同
colorscheme desert "vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下

插件

说明

  1. 建议先安装pathogen,用于管理其他插件
  2. 如果插件有自己的帮助文档,可用下面方式加载
    打开vim,在命令行模式下输入:helptags载入插件的帮组文档,或者用:helptags help_dir载入指定目录的帮组文档,其中help_dir是你需要加载的插件帮组文档所在的目录,比如~/.vim/bundle/nerdtree/doc
  3. 下面每个插件的“配置”中提到的内容,直接拷贝到~/.vimrc文档中

pathogen


管理插件的插件
pathogen让每个插件占有一个单独的目录,解决了文件分散的问题


pathongen主要用于管理插件,因为每个插件都有自己的一套包括诸如auto,doc,color等文件夹的目录,如果将每个插件的对应文件每次都放到对应目录下,是一件很繁琐的事情,而pathogen正是为了解决这个问题而出现的插件。
pathongen启用后,只要每次将插件的独立目录结构整个copy到bundle目录下即可由pathongen接手自行运行新插件

地址

https://github.com/tpope/vim-pathogen

安装

将pathongen.vim拷贝到/.vim/autoload目录下,即,将解压后的autoload目录连同里面的pathogen.vim插件拷贝到/.vim/目录下

启用

在~/.vimrc 文件里, filetype plugin indent on之前的任何地方,加入call pathogen#infect()
例如:

execute pathogen#infect()
syntax on
filetype plugin indent on

用法

如果要添加新的插件,只需将插件下载后,整个目录copy到~/.vim/bundle/目录下,也就是每个插件在buddle目录下各自有一个目录
后面的插件,如无特殊说明,都是这么应用的

配置

call pathogen#infect()
syntax enable
syntax on
filetype plugin indent on

其他

pathogen和vundle都是用来管理vim插件的,但是其作用的方面不同。
pathogen是为了解决每一个插件安装后文件分散到多个目录不好管理而存在的。vundle是为了解决自动搜索及下载插件而存在的


ctags+tagbar+omnicppcomplete

生成标签+展示+联想

ctags


ctags不是vim的插件,而是一个系统工具,用于遍历源代码文件,建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。提供给tagbar和omnicppcomplete调用,查看函数原型

安装

  1. 从http://ctags.sourceforge.net/下载源代码包后,解压缩生成源代码目录
  2. 然后进入源代码根目录执行./configure,
  3. 然后执行make,
  4. 编译成功后执行make install。
  5. 在~/.vimrc中增加以下这行:
    map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

生成tags

在源代码所在目录下,c及c++文件分别执行下面的命令
c :tags -R src
c++:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src

  • –c+±kinds=+p : 为C++文件增加函数原型的标签
  • –fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
  • –extra=+q :为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全 -R : 递归生成src中所有源文件的tags文件

配置文件

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
set tags+=tags; "设置tags的包含目录 "
set tags+=./tags "在当前工作目录下搜索tags文件   add current directory's generated tags file"
set autochdir

用法

把光标移动到某个元素上, CTRL+]就会跳转到对应的定义

CTRL+o 可以回退到原来的地方。如果当前光标下是个局部变量, gd 跳到这个局部变量的定义处。
快捷键:
Ctrl+]  跳到当前光标下单词的标签
Ctrl+O  返回上一个标签
Ctrl+T  返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ]  新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags"
命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst    到第一个匹配
:[count]tprevious 向前 [count] 个匹配
:[count]tnext  向后 [count] 个匹配
:tlast    到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号
(在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + }  预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose   关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi
查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

其他

Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多


tagbar插件


tagbar是一个taglist的替代品,比taglist更适合c++使用,函数能够按类区分,支持按类折叠显示等,显示结果清晰简洁

地址

https://github.com/majutsushi/tagbar

配置

nmap <F4> :TagbarToggle<CR>   "设置快捷键 F4 "
let g:tagbar_width = 40       "设置宽度,默认为40  "
"autocmd VimEnter * nested :call tagbar#autoopen(1)    "打开vim时自动打开tagbar
"let g:tagbar_left = 1         "在左侧
let g:tagbar_right = 1        "在右侧

omnicppcomplete


对C++进行语法补全的插件,可以对函数、命名空间、类成员等进行补全
基于ctags生成的索引信息来实现

地址

http://www.vim.org/scripts/script.php?script_id=1520

用法

e.g:输入pri,然后按下"Ctrl+X Ctrl+O",此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中
当自动补全下拉窗口弹出后,一些可用的快捷键:

Ctrl+P  向前切换成员
Ctrl+N  向后切换成员
Ctrl+E  表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y  表示退出下拉窗口, 并接受当前选项
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N  根据当前文件里关键字补全
Ctrl+X Ctrl+K  根据字典补全
Ctrl+X Ctrl+T  根据同义词字典补全
Ctrl+X Ctrl+I  根据头文件内关键字补全
Ctrl+X Ctrl+]  根据标签补全
Ctrl+X Ctrl+F  补全文件名
Ctrl+X Ctrl+D  补全宏定义
Ctrl+X Ctrl+V  补全vim命令
Ctrl+X Ctrl+U  用户自定义补全方式
Ctrl+X Ctrl+S  拼写建议
帮助文档
:help omnicppcomplete

配置

set completeopt=longest,menu "
let OmniCpp_NamespaceSearch = 2     " search namespaces in the current buffer   and in included files
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
" au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
" set completeopt=menuone,menu,longest
"美化
highlight Pmenu    guibg=darkgrey  guifg=black
highlight PmenuSel guibg=lightgrey guifg=black
"Pmenu 是所有项的配色,PmenuSel 是选中项的配色,guibg 和 guifg 分别对应背景色和前景色。

对STL补全

安装

  1. 下载STL源代码
  2. 拷贝到指定文件夹
    cp ~/.vim/tags/cpp_src
  3. 执行ctag命令
    ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
  4. 在~/.vimrc添加如下设置
    set tags+=~/.vim/tags/cpp_src/tags

nerdtree


文件树浏览

地址

https://github.com/scrooloose/nerdtree

配置

map <C-n> :NERDTree<CR> "ctrl+n快捷键打开"vim-cpp-enhanced-highlight c++ 高亮增强
"Highlighting of class scope is disabled by default. To enable set
let g:cpp_class_scope_highlight =0 "tagHighlight 高亮typedef类型 枚举 宏等的vim插件TagHighlight
"打开源码文件,然后
":UpdateTypesFile"h\c切换 a.vim(针对C、C++)
"将a.vim复制到d:\Program Files\Vim\vim73\plugin,在_vimrc中添加:
nnoremap <silent> <F12> :A<CR> "按F12即可以在c/h文件中切换,也可以通过输入:A实现 "Highlighting of template functions is enabled by setting
let g:cpp_experimental_template_highlight = 1

用法

ctrl+n打开并跳转的窗口,通过将光标置于一个目录/文件上,通过一个按键来操作,下面列出几个常用按键及其对应的操作。更多的操作可以通过输入“?”查看帮助文档

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

YouCompleteMe


YouCompleteMe是一个比较新Vim代码补全插件,可以基于clang为C/C++代码提供代码提示

YCM需要vim版本至少是7.3.584,可以用 :version 查看vim版本号
另外需要支持python, :echo has(‘python’) 的结果是1.

地址

https://github.com/Valloric/YouCompleteMe

安装

YCM的安装相对复杂一点,

  1. 首先用下载插件,用pathogen(或者vundle)进行相应的安装
  2. 然后下载clang,放在ycm_temp/llvm_root_dir 下:
 $ mkdir -p ~/ycm_temp/llvm_root_dir$ mv ~/Download/clang+llvm/* ~/ycm_temp/llvm_root_dir$ cd ycm_temp/llvm_root_dir $ llvm_root_dir  lsbin  docs  include  lib  share
  1. 安装 cmake 和 python-dev ,然后编译如下:
 $ cd ~$ mkdir ycm_build$ cd ycm_build$ cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir .~/.vim/bundle/YouCompleteMe/cpp$ ycm_core

xptemplate


比snipmate更强的代码片段补全

###用法
"要想看当前文件类型支持的代码片段,可以在insert模式下键入 ctr+r ctr+r ctr+
"insert模式下输入片段的名字,然后 ctr+\ 即可插入代码,然后可以用TAB、Shift Tab前后更改高亮显示的内容。
"


SuperTab


omnicppcomplete触发补全需要用到ctr+x ctr+o,SuperTab支持TAB键补全

由于TAB键被映射成了补全快捷键,也就无法通过TAB键直接输入制表符,这时如果想要输入制表符可以通过ctr+v TAB即可,即先输入ctr+v再输入TAB键,在vim下通过ctl+v可以输入很多不可见字符,比如试试ctr+v ctr+w

地址

https://github.com/ervandew/supertab

禁用插件

通过pathogen管理插件,可以有两种方式:
第一种,在~/.vimrc中添加,主要要放在execute pathogen#infect()之前

let g:pathogen_disabled = ['vim-cpp-enhanced-highlight']
"如果版本小于7.0,则禁用YourCompliteMe"
if v:version < '703584'  call add(g:pathogen_disabled, 'YouCompleteMe')
endif
execute pathogen#infect()

第二种,修改.vim/bundle中插件目录名字,比如要禁用插件vim-cpp-enhanced-highlight,可以通过下面命令

$ mv vim-cpp-enhanced-highlight vim-cpp-enhanced-highlight~

完整vimrc文件

"Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下,这里的配置文件影响所有用户。一般情况下,我们不会去改变这两个文件夹下的配置文件,而是修改用户自己的配置文件~/.vimrc,会覆盖全局的配置文件
"
set nu
"pathogen管理插件的插件
"pathogen让每个插件占有一个单独的目录,解决了文件分散的问题
"安装:将pathongen.vim拷贝到~/.vim/autoload目录下,即,将解压后的autoload目录连同里面的pathogen.vim插件拷贝到~/.vim/目录下
"启用:在~/.vimrc 文件里, filetype plugin indent on之前的任何地方,加入希篶all pathogen#infect()
"安装新插件:将插件下载后,整个目录copy到~/.vim/bundle/目录下,也就是每个插件在buddle目录下各自有一个目录
"禁用插件 To disable a plugin, add it's bundle name to the following list
"let g:pathogen_disabled = ['vim-cpp-enhanced-highlight']
"以上这种方式待确认,也可以用
"mv vim-cpp-enhanced-highlight vim-cpp-enhanced-highlight~
"实现禁用
call pathogen#infect()syntax enable "语法高亮"
syntax on
"detect file type
" 自适应不同语言的智能缩进
filetype indent onfiletype plugin indent on" The following are commented out as they cause vim to behave a lot
" " differently from regular Vi. They are highly recommended though.
"
set ignorecase " 搜索模式里忽略大小写
set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase'
" 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
" set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个
" :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-]
" 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9}
" 命令转到别的文件时亦然。
" set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用
" noautoindent 取消设置
" "set smartindent " 智能对齐方式
" set tabstop=4 " 设置制表符(tab键)的宽度
" set softtabstop=4 " 设置软制表符的宽度
" set shiftwidth=4 " (自动) 缩进使用的4个空格
" set cindent " 使用 C/C++ 语言的自动缩进方式
" set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
" "设置C/C++语言的具体缩进方式
" set backspace=2 " 设置退格键可用
" set showmatch " 设置匹配模式,显示匹配的括号
" set linebreak " 整词换行
" set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
" set hidden " Hide buffers when they are abandoned
" set mouse=a " Enable mouse usage (all modes) "使用鼠标
" set number " Enable line number "显示行号
" set previewwindow " 标识预览窗口
" set history=50 " set command history to 50 "历史记录50条
"
"
" "--状态行设置--
" set laststatus=2 "
" 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
" set ruler "
" 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"
" "--命令行设置--
" set showcmd " 命令行显示输入的命令
" set showmode " 命令行显示vim当前模式
"
" "--find setting--
" set incsearch " 输入字符串就显示匹配点
" set hlsearch"pathogen和vundle都是用来管理vim插件的,但是其作用的方面不同。
"pathogen是为了解决每一个插件安装后文件分散到多个目录不好管理而存在的。vundle是为了解决自动搜索及下载插件而存在的"scheme
set fileformats=unix,dos
"let g:solarized_termtrans = 1
set background=dark
colorscheme desert "vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
"togglebg#map("<F5>")"ctags+tagbar+omnicppcomplete 生成标签+展示
"第一步生成tags
"生成tags,查看函数原型
"c  :ctags -R src
"c++:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src
"       --c++-kinds=+p : 为C++文件增加函数原型的标签
"       --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
"       --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
"       -R : 递归生成src中所有源文件的tags文件
"tag命令用法:使用tags文件也很简单,把光标移动到某个元素上, CTRL+]就会跳转到对应的定义,
"CTRL+o 可以回退到原来的地方。如果当前光标下是个局部变量, gd 跳到这个局部变量的定义处。
"快捷键:
"Ctrl+]  跳到当前光标下单词的标签
"Ctrl+O  返回上一个标签
"Ctrl+T  返回上一个标签
":tag TagName 跳到TagName标签
"以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:
":stag TagName 新窗口显示TagName标签,光标跳到标签处
"Ctrl+W + ]  新窗口显示当前光标下单词的标签,光标跳到标签处
"当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags"
"命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
"可以用这些命令在各匹配的标签间移动:
":tfirst    到第一个匹配
":[count]tprevious 向前 [count] 个匹配
":[count]tnext  向后 [count] 个匹配
":tlast    到最后一个匹配
"或者使用以下命令选择要跳转到哪一个
":tselect TagName
"输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号
"(在第一列)。其它列的信息可以让你知道标签在何处被定义过。
"以下命令将在预览窗口显示标签
":ptag TagName 预览窗口显示TagName标签,光标跳到标签处
"Ctrl+W + }  预览窗口显示当前光标下单词的标签,光标跳到标签处
":pclose   关闭预览窗口
":pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
":psearch atoi
"查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。
"
"
""Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
set tags+=tags; "设置tags的包含目录
set tags+=./tags "在当前工作目录下搜索tags文件   add current directory's generated tags file
"set autochdir"第二步,tagbar插件
"tagbar是一个taglist的替代品,比taglist更适合c++使用,函数能够按类区分,支持按类折叠显示等,显示结果清晰简洁
"tagbar
"https://github.com/majutsushi/tagbar
nmap <F4> :TagbarToggle<CR>   "设置快捷键
let g:tagbar_width = 40       "设置宽度,默认为40
"autocmd VimEnter * nested :call tagbar#autoopen(1)    "打开vim时自动打开tagbar
"let g:tagbar_left = 1         "在左侧
let g:tagbar_right = 1        "在右侧  "
"第三步omnicppcomplete
"是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的)
"对C++进行语法补全的插件,可以对函数、命名空间、类成员等进行补全,使用起来和绝大多数IDE差不多,不一样的是IDE为你做了很多你不知道的事情,而omni补全需要依赖tags文件,需要你用ctags命令自己生成
"e.g:输入pri,然后按下"Ctrl+X Ctrl+O",此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中
"当自动补全下拉窗口弹出后,一些可用的快捷键:
"Ctrl+P  向前切换成员
"Ctrl+N  向后切换成员
"Ctrl+E  表示退出下拉窗口, 并退回到原来录入的文字
"Ctrl+Y  表示退出下拉窗口, 并接受当前选项
"其他补全方式:
"Ctrl+X Ctrl+L 整行补全
"Ctrl+X Ctrl+N  根据当前文件里关键字补全
"Ctrl+X Ctrl+K  根据字典补全
"Ctrl+X Ctrl+T  根据同义词字典补全
"Ctrl+X Ctrl+I  根据头文件内关键字补全
"Ctrl+X Ctrl+]  根据标签补全
"Ctrl+X Ctrl+F  补全文件名
"Ctrl+X Ctrl+D  补全宏定义
"Ctrl+X Ctrl+V  补全vim命令
"Ctrl+X Ctrl+U  用户自定义补全方式
"Ctrl+X Ctrl+S  拼写建议
"帮助文档
":help omnicppcomplete
set completeopt=longest,menu
let OmniCpp_NamespaceSearch = 2     " search namespaces in the current buffer   and in included files
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
" au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
" set completeopt=menuone,menu,longest
"美化
highlight Pmenu    guibg=darkgrey  guifg=black
highlight PmenuSel guibg=lightgrey guifg=black
"Pmenu 是所有项的配色,PmenuSel 是选中项的配色,guibg 和 guifg 分别对应背景色和前景色。
"对STL补全
"1.下载STL源代码
"2.cp ~/.vim/tags/cpp_src
"3.执行ctag命令:ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
"4.添加如下设置
set tags+=~/.vim/tags/cpp_src/tags"nerdtree 左侧文件树浏览
map <C-n> :NERDTree<CR>"vim-cpp-enhanced-highlight c++ 高亮增强
"Highlighting of class scope is disabled by default. To enable set
let g:cpp_class_scope_highlight =0 "tagHighlight 高亮typedef类型 枚举 宏等的vim插件TagHighlight
"打开源码文件,然后
":UpdateTypesFile"h\c切换 a.vim(针对C、C++)
"将a.vim复制到d:\Program Files\Vim\vim73\plugin,在_vimrc中添加:
nnoremap <silent> <F12> :A<CR> "按F12即可以在c/h文件中切换,也可以通过输入:A实现 "Highlighting of template functions is enabled by setting
let g:cpp_experimental_template_highlight = 1"YouCompleteMe
"YouCompleteMe是一个比较新Vim代码补全插件,可以基于clang为C/C++代码提供代码提示。它安装配置简单,Bug很少
"YCM需要vim版本至少是7.3.584,可以用 :version 查看vim版本号
"另外需要支持python, :echo has('python') 的结果是1.
" YCM的安装相对复杂一点,首先用下载插件,用pathogen(或者vundle)进行相应的安装,然后下载clang,放在
" ycm_temp/llvm_root_dir 下:
"
" $ mkdir -p ~/ycm_temp/llvm_root_dir
" $ mv ~/Download/clang+llvm/* ~/ycm_temp/llvm_root_dir
" $ cd ycm_temp/llvm_root_dir
" $ llvm_root_dir  ls
" bin  docs  include  lib  share
"
" 安装 cmake 和 python-dev ,然后编译如下:
"
" $ cd ~
" $ mkdir ycm_build
" $ cd ycm_build
" $ cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir .
" ~/.vim/bundle/YouCompleteMe/cpp
" $ ycm_core
"
"
""xptemplate,比snipmate更强的代码片段补全
"要想看当前文件类型支持的代码片段,可以在insert模式下键入 <C-r><C-r><C-\>
"insert模式下输入片段的名字,然后 <C-\> 即可插入代码,然后可以用TAB、Shift Tab前后更改高亮显示的内容。
""SuperTab
"omnicppcomplete触发补全需要用到ctr+x ctr+o,SuperTab支持TAB键补全
"https://github.com/ervandew/supertab
"由于TAB键被映射成了补全快捷键,也就无法通过TAB键直接输入制表符,这时如果想要输入制表符可以通过ctr+v TAB即可,即先输入ctr+v再输入TAB键,在vim下通过ctl+v可以输入很多不可见字符,比如试试ctr+v ctr+w
"

参考

  1. 所需即所获:像 IDE 一样使用 vim
  2. Vim插件简单介绍
  3. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
  4. 把vim打造成牛逼的C++ IDE
  5. vim 中OmniCppComplete的安装和使用
  6. VIM插件攻略
  7. vim 中Ctags的安装和使用

VIM配置及插件入门相关推荐

  1. php python插件安装,小弟我的vim配置和插件 小型 python php IDE

    我的vim配置和插件 小型 python php IDE 我的vim配置和插件小型php和python IDE 附件中有我目前使用的完整的vim配置文件.vimrc和插件的打包.直接放到自己的home ...

  2. vim配置及插件安装管理

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...

  3. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE

    C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交 ...

  4. vim 配置及插件安装管理(超级详细)

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...

  5. Linux下的vim配置和插件管理

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...

  6. 【Linux基础】vim配置及插件安装管理

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...

  7. vim配置及插件安装管理(超级详细)

    转自:https://www.cnblogs.com/snowbook/p/5923770.html 1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux ...

  8. vim配置及插件安装笔记

    1. 首先打开vim的配置文件vimrc,并加入以下常用的配置: cd ~ mkdir .vim vim .vimrc " 设置当文件被改动时自动载入 set autoread " ...

  9. 高效的vim配置及其插件管理

    俗话说:"工欲善其事必先利其器!"  . 同样的道理,当在linux系统中使用的vim编辑器时,我们就必须为它配置强大的插件,这样当我们使用vim时,会大大提高编写效率!好了,废话 ...

最新文章

  1. 怎么设计一个合适的延时队列?
  2. office2010删除分页符
  3. SAP Spartacus的StorefrontConfig对象
  4. 15_新闻客户端_展示文字内容完成
  5. 在线考试 ajax,关于在线考试使用ajax一问?
  6. windows php fastcgi,windows下FastCGI(php-cgi)的工作原理和配置
  7. 华科计算机学院三好学生,哲学学院常若帆荣获校“三好学生标兵”称号
  8. 如何提高lstm的预测精度_直线电机点胶机如何提高点胶精度及生产效率?
  9. 【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整
  10. base cap 分布式_分布式系统一致性问题、CAP定律以及 BASE 理论
  11. JDBC14 ORM03 JavaBean封装
  12. 转 web 开发字体
  13. macOS “不能安装该软件,因为当前无法从软件更新服务器获得” 解决方法
  14. vue 3 引入百度地图api
  15. 数据结构实验一,第10题:基于顺序存储结构的图书信息表的图书去重
  16. JVM 运行机制及其原理
  17. 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
  18. 低功耗广域网络和ISM频段:物联网的里程碑还是公地悲剧?
  19. 如何提高学习欲--奖励机制
  20. 数据库主键到底是用自增长(INT)好还是UUID好?

热门文章

  1. PHP漂流瓶代码,【按键精灵】连信打招呼、漂流瓶源码
  2. 浏览器的网络请求304的缓存问题
  3. H.264和HEVC如何正确的丢帧
  4. csdn排版怎么一行两张图
  5. SRM系统排名,国内做srm系统的公司
  6. 好书推荐-腾讯方法:一个市值1500亿美元公司的产品真经
  7. java 服务器下载APK文件
  8. 【TOOLS】python3利用SMTP进行邮件Email自主发送
  9. Mac同时访问公司内外网
  10. 简单的Android端新闻App的实现