VIM的强大除了快捷键以外,就是可以自行对其进行配置或添加插件,本文对配置及插件使用进行了入门介绍,领进门后各自修行,推荐查阅自带的文档
Vim本身的系统配置文件夹是在/usr/share/vim/
和/etc/vim/
两个文件夹下,这里的配置文件影响所有用户。一般情况下,我们不会去改变这两个文件夹下的配置文件,而是修改用户自己的配置文件 ~/.vimrc
,会覆盖全局的配置文件
“后面跟的是注释
" 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目录下
管理插件的插件
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不是vim的插件,而是一个系统工具,用于遍历源代码文件,建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。提供给tagbar和omnicppcomplete调用,查看函数原型
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
在源代码所在目录下,c及c++文件分别执行下面的命令
c :tags -R src
c++:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
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是一个taglist的替代品,比taglist更适合c++使用,函数能够按类区分,支持按类折叠显示等,显示结果清晰简洁
https://github.com/majutsushi/tagbar
nmap <F4> :TagbarToggle "设置快捷键 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 "在右侧
对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 分别对应背景色和前景色。
cp ~/.vim/tags/cpp_src
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
set tags+=~/.vim/tags/cpp_src/tags
文件树浏览
https://github.com/scrooloose/nerdtree
map <C-n> :NERDTree "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 <F12> :A "按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是一个比较新Vim代码补全插件,可以基于clang为C/C++代码提供代码提示
YCM需要vim版本至少是7.3.584,可以用 :version 查看vim版本号
另外需要支持python, :echo has(‘python’) 的结果是1.
https://github.com/Valloric/YouCompleteMe
YCM的安装相对复杂一点,
$ 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
$ 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
比snipmate更强的代码片段补全
“要想看当前文件类型支持的代码片段,可以在insert模式下键入 ctr+r ctr+r ctr+\
“insert模式下输入片段的名字,然后 ctr+\ 即可插入代码,然后可以用TAB、Shift Tab前后更改高亮显示的内容。
“
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~
"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 on
filetype 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("")
"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 :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
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 :TagbarToggle "设置快捷键
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 :NERDTree
"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 :A "按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模式下键入
"insert模式下输入片段的名字,然后 即可插入代码,然后可以用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
"