首先确定vim编辑.cc或者.cpp文件时当前自动补全函数,在命令模式下输入
:set omnifunc?
如果得到的结果为:omnifunc=ccomplete#Complete,说明有必要进行以下的操作以实现针对c++的自动补全

1  首先安装OmniCppComplete,参见:
http://www.vim.org/scripts/script.php?script_id=1520

安装的过程很简单,与大多数vim插件一样,cd到~/.vim/目录解压所下载的文件即可(这个~目录是当前用户的~目录,如果是root的,那么全局有效,如果只是当前用户,只有在当前用户下有效,新手要搞清楚这个)
2 在~/.vim/目录下创建tags子目录
3 创建stdc++ 对应的tags:
A)首先下载经高手修改定制的libstdc++头文件,可以到这里下载:
http://www.vim.org/scripts/script.php?script_id=2358
并将其解压到~/.vim/tags
B) 运行以下命令
cd /.vim/tags cd ~/.vim/tags ctags -R –c++-kinds=+p –fields=+iaS –extra=+q –language-force=C++ cpp_src
在~/.vimrc文件里添加tags文件的路径,我的STL源码目录是~/.vim/tags/cpp_src,所以就在.vimrc里加这么一句

set tags+=~/.vim/tags/cpp_src/tags 

4 修改~/.vimrc文件
在其中加入以下内容:

"This line should not be removed as it ensures that various options are" properly set to work with the Vim-related packages available in Debian.debian.vim" Uncomment the next line to make Vim more Vi-compatible" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous" options, so any other options should be set AFTER setting 'compatible'.set nocompatible" Vim5 and later versions support syntax highlighting. Uncommenting the" following enables syntax highlighting by default.if has("syntax")syntax on            " 语法高亮endifcolorscheme ron        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下" detect file typefiletype onfiletype plugin on" If using a dark background within the editing area and syntax highlighting" turn on this option as wellset background=dark" Uncomment the following to have Vim jump to the last position when" reopening a fileif has("autocmd")au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif"have Vim load indentation rules and plugins according to the detected filetypefiletype plugin indent onendif" 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 abandonedset mouse=a            " Enable mouse usage (all modes)    "使用鼠标set number            " Enable line number    "显示行号"set previewwindow    " 标识预览窗口"--状态行设置--set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。"--命令行设置--set showcmd            " 命令行显示输入的命令set showmode        " 命令行显示vim当前模式"--find setting--set incsearch        " 输入字符串就显示匹配点set hlsearch     " configure tags - add additional tags here or comment out not-used onesset tags+=~/.vim/tags/cppset tags+=~/.vim/tags/glset tags+=~/.vim/tags/fl " build tags of your own project with CTRL+F12map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>" OmniCppCompletelet OmniCpp_NamespaceSearch = 1let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameterslet OmniCpp_MayCompleteDot = 1 " autocomplete after .let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->let OmniCpp_MayCompleteScope = 1 " autocomplete after ::let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]" automatically open and close the popup menu / preview windowau CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endifset completeopt=menuone,menu,longest,preview

5 检验
用vim打开cpp文件,输入
std::
将得到std命名空间的所有标示符,按CTRL+N或者CTRL+P选择
继续输入std::vector vi,然后输入
vi.
vim将自动提示其成员

我拉.vimrc(这个文件是在~文件夹下,用 ls -al 就可以看到)

" configure tags - add additional tags here or comment out not-used onesset tags+=~/.vim/tags/cpp_src/tagsset tags+=~/.vim/tags/glset tags+=~/.vim/tags/fl" build tags of your own project with CTRL+F12map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>" OmniCppCompletelet OmniCpp_NamespaceSearch = 1let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameterslet OmniCpp_MayCompleteDot = 1 " autocomplete after .let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->let OmniCpp_MayCompleteScope = 1 " autocomplete after ::let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]" automatically open and close the popup menu / preview windowau CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endifset completeopt=menuone,menu,longest,preview"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""键盘命令""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""nmap <leader>w :w!<cr>nmap <leader>f :find<cr>" 映射全选+复制 ctrl+amap <C-A> ggVGYmap! <C-A> <Esc>ggVGYmap <F12> gg=G" 选中状态下 Ctrl+c 复制vmap <C-c> "+y"去空行  nnoremap <F2> :g/^\s*$/d<CR> "比较文件  nnoremap <C-F2> :vert diffsplit "新建标签  map <M-F2> :tabnew<CR>  "列出当前目录文件  map <F3> :tabnew .<CR>  "打开树状文件目录  map <C-F3> \be  "C,C++ 按F5编译运行map <F5> :call CompileRunGcc()<CR>func! CompileRunGcc()exec "w"if &filetype == 'c'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'cpp'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'java' exec "!javac %" exec "!java %<"elseif &filetype == 'sh':!./%endifendfunc"C,C++的调试map <F8> :call Rungdb()<CR>func! Rungdb()exec "w"exec "!g++ % -g -o %<"exec "!gdb ./%<"endfunc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""实用设置"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 设置当文件被改动时自动载入set autoread" quickfix模式autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>"代码补全 set completeopt=preview,menu "允许插件  filetype plugin on"共享剪贴板  set clipboard+=unnamed "从不备份  set nobackup"make 运行:set makeprg=g++\ -Wall\ \ %"自动保存set autowriteset ruler                   " 打开状态栏标尺set magic                   " 设置魔术set guioptions-=T           " 隐藏工具栏set guioptions-=m           " 隐藏菜单栏"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\" 设置在状态行显示的信息set foldcolumn=0set foldmethod=indent set foldlevel=3 set foldenable              " 开始折叠" 不要使用vi的键盘模式,而是vim自己的set nocompatible" 语法高亮set syntax=on" 去掉输入错误的提示声音set noeb" 在处理未保存或只读文件的时候,弹出确认set confirm" 自动缩进set autoindentset cindent" Tab键的宽度set tabstop=4" 统一缩进为4set softtabstop=4set shiftwidth=4" 不要用空格代替制表符set noexpandtab" 在行和段开始处使用制表符set smarttab" 显示行号set number" 历史记录数set history=1000"禁止生成临时文件set nobackupset noswapfile"搜索忽略大小写set ignorecase"搜索逐字符高亮set hlsearchset incsearch"行内替换set gdefault"编码设置set enc=utf-8set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936"语言设置set langmenu=zh_CN.UTF-8set helplang=cn" 我的状态行显示的内容(包括文件类型和解码)"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]" 总是显示状态行set laststatus=2" 命令行(在状态行下)的高度,默认为1,这里是2set cmdheight=2" 侦测文件类型filetype on" 载入文件类型插件filetype plugin on" 为特定文件类型载入相关缩进文件filetype indent on" 保存全局变量set viminfo+=!" 带有如下符号的单词不要被换行分割set iskeyword+=_,$,@,%,#,-" 字符间插入的像素行数目set linespace=0" 增强模式中的命令行自动完成操作set wildmenu" 使回格键(backspace)正常处理indent, eol, start等set backspace=2" 允许backspace和光标键跨越行边界set whichwrap+=<,>,h,l" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)set mouse=aset selection=exclusiveset selectmode=mouse,key" 通过使用: commands命令,告诉我们文件的哪一行被改变过set report=0" 在被分割的窗口间显示空白,便于阅读set fillchars=vert:\ ,stl:\ ,stlnc:\" 高亮显示匹配的括号set showmatch" 匹配括号高亮的时间(单位是十分之一秒)set matchtime=1" 光标移动到buffer的顶部和底部时保持3行距离set scrolloff=3" 为C程序提供自动缩进set smartindent" 高亮显示普通txt文件(需要txt.vim脚本)au BufRead,BufNewFile *  setfiletype txt"自动补全:inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {}<ESC>i:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>ifunction! ClosePair(char)if getline('.')[col('.') - 1] == a:charreturn "\<Right>"elsereturn a:charendifendfunctionfiletype plugin indent on "打开文件类型检测, 加了这句才可以用智能补全set completeopt=longest,menu"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" CTags的设定  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""let Tlist_Sort_Type = "name"    " 按照名称排序  let Tlist_Use_Right_Window = 1  " 在右侧显示窗口  let Tlist_Compart_Format = 1    " 压缩方式  let Tlist_Exist_OnlyWindow = 1  " 如果只有一个buffer,kill窗口也kill掉buffer  let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags  let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树  autocmd FileType java set tags+=D:\tools\java\tags  "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  "let Tlist_Show_One_File=1            "不同时显示多个文件的tag,只显示当前文件的"设置tags  set tags=tags  "set autochdir """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""其他东东""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""默认打开Taglist let Tlist_Auto_Open=1 

Linux——VIM开发C++自动补全(STL、括号)和开发环境配置相关推荐

  1. vim增加php自动补全

    from: http://onopc.com/2010/12/30/154.html vim增加php自动补全 在vim配置文件/etc/vimrc中加入如下内容: au FileType php c ...

  2. Vim中安装自动补全插件YouCompleteMe

    前言 自动补全:YouCompleteMe可以说是Vim中最好用的插件了,但是它的安装也可以说的上是Vim中最难的一个了.往往会出现各种错误,在还没有享受到这个插件给我们带来的快感时就会被安装的各种错 ...

  3. 新版VSCode中Python设置自动补全函数括号

    文章目录 前言 一.旧版的方法(Jedi) 二.新版的方法(Pylance) 提示 前言 在网上能找到的关于如何让VSCode中Python自动补全函数括号的方法都是同样的,但基本上都是几年前的方法了 ...

  4. 代替YCM,当前vim最强自动补全方案

    更多分享内容可访问我的个人博客 https://www.niuiic.top/ 本文介绍 vim 自动补全方案.主要采用更强大的 coc.nvim 插件来替代 YCM. vim 自动补全 前言 自动补 ...

  5. macos 10.15.3 安装vim+python3 +ycm自动补全+第三方库补全

    效果: macos 10.15.3   Catalina 默认安装是 vim8.1 / python2.7.16/python3.7.3  . vim8.1 没有带python3支持,需要更新到最新版 ...

  6. Python 之vim编写python自动补全

    Pydiction :vim - python自动补全插件 插件的安装如下: 1.下载插件包 https://github.com/vim-scripts/Pydiction 可以直接下载,也可git ...

  7. 在VIM里面设置自动补全功能

    pydiction 这是一个相当不错的 Python 代码自动完成的脚本. 可以实现下面python代码的自动补全: 简单python关键词补全 python 函数补全带括号 python 模块补全 ...

  8. vim python 代码提示_linux下vim python代码自动补全

    一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...

  9. vim的php自动补全,通过vim字典补全,实现php函数名自动补全

    明城 on 2010年1月4日 22:43 # 其实一句话就可以了,比如我的: au FileType php setlocal dict+=~/.vim/dict/php_funclist.txt ...

最新文章

  1. 全国省市区县数据库脚本
  2. Linux Centos7安装hadoop3.x安装流程(跪舔文)
  3. php 安全基础 第七章 验证与授权 密码嗅探
  4. Zookeeper Learning
  5. 【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析
  6. 专访阿里数据库备份专家 教你pick最有效的备份系统
  7. Linux下查看用户登陆后的操作记录
  8. 升级Windows10后,远程登录失败,问题:您的凭据不工作(RDP do not work )
  9. 神话系列之一 C# 开发的操作系统和数据库
  10. JavaScript Module Pattern
  11. 移动端双Token免登录(附代码)
  12. 更改计算机睡眠时间注册表,如何通过修改注册表开启/关闭系统休眠?
  13. VMware 虚拟机图文安装和配置 AlmaLinux OS 8.6 教程
  14. 系统论重要模型_笔记
  15. 图论中的0x3f和memset使用注意事项(较详细)
  16. Qt自定义对话框及调用方法
  17. JVM-JConsole:Java监视与管理控制台(windows)
  18. 如何禁用win10的水果输入法
  19. 温故而知新,19646字Java基础知识梳理
  20. pytorch.chunk

热门文章

  1. python热成像_盘点Terabee传感器家族:TOF测距、3D相机、热成像
  2. [Pytorch] BCELoss和BCEWithLogitsLoss(Sigmoid-BCELoss合成为一步)
  3. Transfomer入门:Self-attention + Multi-head Self-attention
  4. mysql itpub_mysql
  5. 卷积神经网络系列之softmax,softmax loss和cross entropy
  6. layui复选框:被js操作checked切换并显示状态(含案例、代码)
  7. vuejs项目如何修改node_mudule为公用文件?
  8. select自定义箭头样式
  9. html5 table删除修改,一个可以增加和删除行的table并可编辑表格中内容
  10. 超好看的动态流量卡官网源码多功能集成式源码