windows配置gvim高效率编程(c&c++)带自动补全代码

对vim的配置足以处理一般的比赛获其他编程项目要求,如自动缩进,自动补全等等。先上几张截图,看看效果:
windows配置gvim高效率编程(c&c++)带自动补全代码_第1张图片

windows配置gvim高效率编程(c&c++)带自动补全代码_第2张图片

可以看见vim简洁高效的界面和不错的缩进功能。

debug功能
windows配置gvim高效率编程(c&c++)带自动补全代码_第3张图片


一、安装gvim
下载资源并安装

百度云下载网址http://pan.baidu.com/share/link?shareid=365469&uk=2970460274

二、配置c++环境
1,首先下载安装MinGW,下载地址在http://sourceforge.net/projects/mingw/。这个是边下载边安装的,下载完成即安装完成。我的安装目录是F:\MinGW。
2,设置环境变量。右击我的电脑,点属性->高级->环境变量。然后:
1、在PATH里加入F:\MinGW\bin,记得,如果里面还有其他的变量,记得要加个分号啊,分号得在英文输入模式下输入的。
2、新建LIBRARY_PATH变量,如果有的话,在值中加入F:\MinGW\lib,这是标准库的位置。
3、新建C_INCLUDEDE_PATH变量,值设为F:\MinGW\include。
4、新建CPLUS_INCLUDE_PATH变量,值为F:\MinGW\include;F:\MinGW\include\c++\4.5.0;F:\MinGW\include\c++\4.5.0\backward;F:\MinGW\include\c++\4.5.0\mingw32
具体路径请根据你的MinGW选择。
3、在你的_vimrc文件中配置编译调试选项。
“定义CompileRun函数,用来调用进行编译和运行

func CompileRun()
exec “w”
“C程序
if &filetype == ‘c’
exec “!gcc -Wall -enable-auto-import % -g -o %<.exe”
“c++程序
elseif &filetype == ‘cpp’
exec “!g++ -Wall -enable-auto-import  % -g -o %<.exe”
“Java程序
elseif &filetype == ‘java’
exec “!javac %”
endif
endfunc
“结束定义CompileRun
“定义Run函数
func Run()
if &filetype == ‘c’ || &filetype == ‘cpp’
exec “!%<.exe”
elseif &filetype == ‘java’
exec “!java %<”
endif
endfunc
“定义Debug函数,用来调试程序
func Debug()
exec “w”
“C程序
if &filetype == ‘c’
exec “!gcc % -g -o %<.exe”
exec “!gdb %<.exe”
elseif &filetype == ‘cpp’
exec “!g++ % -g -o %<.exe”
exec “!gdb %<.exe”
“Java程序
elseif &filetype == ‘java’
exec “!javac %”
exec “!jdb %<”
endif
endfunc
“结束定义Debug
“设置程序的运行和调试的快捷键F5和Ctrl-F5
map  :call CompileRun()
map  :call Run()
map  :call Debug()

可能遇到的问题:
编译的时候可能会出现:
Info: resolving std::cout by linking to __imp___ZSt4cout (auto-import)
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a
uto-importing has been activated without –enable-auto-import specified on the c
ommand line.
This should work unless it involves constant data structures referencing symbols
from auto-imported DLLs.)
在编译命令中加入 -enable-auto-import

三、自动补全
一些代码缩进和其他例如括号自动补全等只需在vimrc配置文件加上相应配置代码即可,最后博主会上传博主自己的vimrc配置代码(较适合于比赛)。接下来是代码自动补全插件的安装:
参考自:http://timothyqiu.com/archives/using-omnicomplete-for-c-cplusplus-in-vim/

OmniComplete 并不是插件的名字,而是 Vim 众多补全方式中的一种(全能补全)。说白了 OmniComplete 其实就是根据光标前的内容猜测光标后的内容,具体怎么猜取决于所采用的脚本。

而 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本。

那么经常和 OmniCppComplete 一起出没的 Ctags 又是什么呢?Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点关系都没有)。它可以为各种语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 来说,就是把源代码中的各种宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。

安装 Ctags
从官网下载 Ctags 可执行文件,网站是 http://ctags.sourceforge.net/
将下载到的文件(仅 EXE 文件即可)解压到一个目录,例如 F:/ctags
将该目录加入环境变量 PATH
准备索引文件
以生成 C++ 标准库索引文件为例:

下载专为 Ctags 修改过的 libstdc++ 头文件
将其解压到一个目录,例如 F:/ctags/cpp_src
使用命令行进入 F:/ctags/cpp_src 后执行:

ctags -R –sort=1 –c++-kinds=+p –fields=+iaS –extra=+q –language-force=C++ -f cpp .
建议将上一步生成的 F:/ctags/cpp_src/cpp 文件放到一个专门放置索引文件的目录以便后面的统一设置,例如放到 F:/ctags/tags

其它库的索引文件也可以依法炮制,只需切换到该库的 include 文件夹,执行:

ctags -R –sort=yes –c++-kinds=+p –fields=+iaS –extra=+q –language-force=C++ -f <文件名> .

安装 OmniCppComplete
下载 OmniCppComplete
将下载到的文件解压到 ~/.vim (unix) 或者 %HOMEPATH%\vimfiles (Windows) 文件夹
在 vimrc 文件中加入

" ctags 索引文件 (根据已经生成的索引文件添加即可)
set tags+=D:/ctags/tags/cpp
" OmniCppComplete
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

另外,还需确认在 vimrc 中开启了 filetype 选项,不然 OmniComplete 无法自动识别 C/C++ 文件类型进行补全。

这样,在插入模式编辑 C/C++ 源文件时按下 . 或 -> 或 ::,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。

这样,一个精简的IDE就完成了。

博主的vimrc

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin


set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
"定义CompileRun函数,用来调用进行编译和运行
func CompileRun()
exec "w"
"C程序
if &filetype == 'c'
exec "!gcc -Wl,-enable-auto-import % -g -o %<.exe"
"c++程序
elseif &filetype == 'cpp'
exec "!g++ -Wl,-enable-auto-import % -g -o %<.exe"
"Java程序
elseif &filetype == 'java'
exec "!javac %"
endif
endfunc
"结束定义CompileRun
"定义Run函数
func Run()
if &filetype == 'c' || &filetype == 'cpp'
exec "!%<.exe"
elseif &filetype == 'java'
exec "!java %<"
endif
endfunc
"定义Debug函数,用来调试程序
func Debug()
exec "w"
"C程序
if &filetype == 'c'
exec "!gcc % -g -o %<.exe"
exec "!gdb %<.exe"
elseif &filetype == 'cpp'
exec "!g++ % -g -o %<.exe"
exec "!gdb %<.exe"
"Java程序
elseif &filetype == 'java'
exec "!javac %"
exec "!jdb %<"
endif
endfunc
"结束定义Debug
"设置程序的运行和调试的快捷键F5和Ctrl-F5
map  :call CompileRun()
map  :call Run()
map  :call Debug()
:set number

" Vim color file
" Maintainer:   Bram Moolenaar vim.org>
" Last Change:  2006 Apr 14

" This color scheme uses a dark grey background.

" First remove all existing highlighting.
set background=dark
hi clear
if exists("syntax_on")
  syntax reset
endif

let colors_name = "evening"

hi Normal ctermbg=DarkGrey ctermfg=White guifg=White guibg=grey20

" Groups used in the 'highlight' and 'guicursor' options default value.
hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
hi IncSearch term=reverse cterm=reverse gui=reverse
hi ModeMsg term=bold cterm=bold gui=bold
hi StatusLine term=reverse,bold cterm=reverse,bold gui=reverse,bold
hi StatusLineNC term=reverse cterm=reverse gui=reverse
hi VertSplit term=reverse cterm=reverse gui=reverse
hi Visual term=reverse ctermbg=black guibg=grey60
hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
hi Cursor guibg=Green guifg=Black
hi lCursor guibg=Cyan guifg=Black
hi Directory term=bold ctermfg=LightCyan guifg=Cyan
hi LineNr term=underline ctermfg=Yellow guifg=Yellow
hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
hi NonText term=bold ctermfg=LightBlue gui=bold guifg=LightBlue guibg=grey30
hi Question term=standout ctermfg=LightGreen gui=bold guifg=Green
hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
hi SpecialKey term=bold ctermfg=LightBlue guifg=Cyan
hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta
hi WarningMsg term=standout ctermfg=LightRed guifg=Red
hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
hi Folded term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=LightGrey guifg=DarkBlue
hi FoldColumn term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
hi DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue
hi DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta
hi DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan
hi CursorColumn term=reverse ctermbg=Black guibg=grey40
hi CursorLine term=underline cterm=underline guibg=grey40

" Groups for syntax highlighting
hi Constant term=underline ctermfg=Magenta guifg=#ffa0a0 guibg=grey5
hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5
if &t_Co > 8
  hi Statement term=bold cterm=bold ctermfg=Yellow guifg=#ffff60 gui=bold
endif
hi Ignore ctermfg=DarkGrey guifg=grey20

" vim: sw=2
set wrap            " 长行自动折行
set number          " 显示行号  
set cursorline      " 突出显示当前行  
set tabstop=4       " 设置tab键的宽度  
set backspace=2     " 设置退格键可用  

syn on              " 打开语法高亮  
set showmatch       " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号  
set smartindent     " 智能对齐方式  
set shiftwidth=4    " 换行时行间交错使用4个空格  
set autoindent      " 自动对齐  
set ai!             " 设置自动缩进  
set cindent         " 以c/c++的模式缩进
filetype plugin indent on     " 开启插件  
set completeopt=longest,menu

" ctags 索引文件 (根据已经生成的索引文件添加即可) 
set tags+=F:/Ctags/tags/cpp
" OmniCppComplete 
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
filetype plugin indent on

" 括号自动补全
inoremap ( ()i
inoremap [ []i
inoremap { {}kA
" inoremap < <>i

map  :call SetTitle()
func SetTitle()
let l = 0
let l = l + 1 | call setline(l, '/*')
let l = l + 1 | call setline(l, ' * Author:  ktmzgl')
let l = l + 1 | call setline(l, ' * Created Time:  '.strftime('%c'))
let l = l + 1 | call setline(l, ' * File Name: '.expand('%'))
let l = l + 1 | call setline(l, ' */')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, '#include ')
let l = l + 1 | call setline(l, 'using namespace std;')
let l = l + 1 | call setline(l, 'const int maxint = -1u>>1;')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, 'int main() {')
let l = l + 1 | call setline(l, '    return 0;')
let l = l + 1 | call setline(l, '}')
let l = l + 1 | call setline(l, '')
endfunc

你可能感兴趣的:(vim)