windows下VIM配置c_cpp自动补全代码

⌚Time: 2022-11-10 20:54:57

👨‍💻Author: Jack Ge

缓冲区补全

ctrl+n/ctrl+p从当前缓存区补全

标签文件补全

ctags

ctags下载

https://github.com/universal-ctags/ctags-win32

解压后添加path环境变量

利用ctags对c语言的include头文件目录产生tag文件


生成c++tag文件cpp.tagfile

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++ -f D:\libs\tags\cpp.tagfile D:\libs\mingw48_32\i686-w64-mingw32\include

生成gtk库的tag文件gtk.tagfile

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++ -f D:\libs\tags\gtk.tagfile D:\libs\gtk+-bundle-2.12.11-20080720\include

omnicppcomplete插件的安装


description

This script is for vim 7.0 or higher, it provides C/C++ completion thanks to a ctags database.



If you don't want a completion based on ctags there are solutions using compiler front ends (real C++ parsing)

    - "clang" with the following script : http://www.vim.org/scripts/script.php?script_id=3302

    - "gccsense" : http://cx4a.org/software/gccsense



Features :



    -   Complete namespaces, classes, structs and union members.

    -   Complete inherited members for classes and structs (single and multiple inheritance).

    -   Complete attribute members eg: myObject->_child->_child etc...

    -   Complete type returned by a function eg: myObject->get()->_child.

    -   Complete the "this" pointer.

    -   Complete a typedef.

    -   Complete the current scope (global and class scope).

    -   Complete an object after a cast (C and C++ cast).

    -   Complete anonymous types (eg: struct {int a; int b;}g_Var; g_Var.???). It also works for a typedef of an anonymous type.

下载地址

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

解压后,将after、autoload、doc三个文件夹放在vim的安装目录下的vimfile文件夹下,如果没有,建立一个vimfile文件夹。这是vim建立的插件文件夹,vim运行时会自动加载里面插件

至于官方文档的~/.vim under unix or %HOMEPATH%\vimfiles under windows

我尝试在windows系统中放入%HOMEPATH%\vimfiles文件夹下,没有作用 %HOMEPATH%:C:\Users\usrname

编辑_vimrc文件,windows系统中它位于vim的安装目录下,追加下面的配置

设置tag文件


set tags+=D:\libs\tags\cpp.tagfile"生成的c语言tag文件路径

set tags+=D:\libs\tags\gtk.tagfile"生成的gtk库的tag文件路径

取消vi兼容模式和开启文件类型插件


set nocp

filetype plugin on

设置omnifunc


set omnifunc=ccomplete#Complete

对于其他的语言设置set omnifunc=javacomplete#Complete、set omnifunc=xmlcomplete#Complete


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

之后在代码编辑过程中,输入ctrl+x,ctrl+o就会开启自动补全

字典文件补全

在d:\libs\tags建立一个字典文件spell.txt


abcdfghi

acacacacac

编辑_vimrc文件,加入


set dictionary+=D:\libs\tags\spell.txt

编辑模式按ctrl+x,ctrl+k触发字典补全

如何使用ctrl+n来触发字典补全?

vimrc文件中设置


set complete+=k

complete选项

. : 表示当前以打开的缓冲区

w : 当前打开的窗口

b : 当前缓冲区列表

u : 当前处于缓冲区列表中,但是未打开的缓冲区

t : 当前标签文件

U : 当前打开的,不属于缓冲区列表中的缓冲区

k : 从字典文件中加载的补全项

i : 从当前文件和包含文件中读取

d : 从当前文件和包含文件中读取使用 define定义的宏

完整的内容可以使用 :h 'complete' 来查看。

快捷键列表


<Ctrl + n> : 普通关键字补全,主要来源自缓冲区列表和当前缓冲区

<Ctrl+x><Ctrl+n> : 与 <Ctrl+n>作用相同

<Ctrl+x><Ctrl+o> : 根据编程语言来进行补全

整行补全                        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

补全vim命令                     CTRL-X CTRL-V

用户自定义补全方式              CTRL-X CTRL-U

拼写建议                        CTRL-X CTRL-S

候选列表颜色配置

如何改变候选列表颜色,在vim的colors文件夹中,存放着配色方案

选择使用的配色方案,编辑,加入


highlight Pmenu guibg=#444444 guifg=#6666ff

highlight PmenuSel guibg=#555555 guifg=#7777ff

Pmenu是候选列表项

PmenuSel是选中的项

guibg是背景色

guifg是前景色

之后在gvim中选择配色方案就可以了

编辑vimrc


colorscheme 配色方案