windows配置gvim高效率编程(cc++)带自动补全代码
對vim的配置足以處理一般的比賽獲其他編程項目要求,如自動縮進,自動補全等等。先上幾張截圖,看看效果:?
可以看見vim簡潔高效的界面和不錯的縮進功能。
debug功能?
一、安裝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函數,用來調用進行編譯和運行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
可能遇到的問題:?
編譯的時候可能會出現:?
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 文件中加入
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
另外,還需確認在 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 mswinset diffexpr=MyDiff() function MyDiff()let opt = '-a --binary 'if &diffopt =~ 'icase' | let opt = opt . '-i ' | endifif &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endiflet arg1 = v:fname_inif arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endiflet arg2 = v:fname_newif arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endiflet arg3 = v:fname_outif arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endiflet eq = ''if $VIMRUNTIME =~ ' 'if &sh =~ '\<cmd'let cmd = '""' . $VIMRUNTIME . '\diff"'let eq = '"'elselet cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'endifelselet cmd = $VIMRUNTIME . '\diff'endifsilent 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 <F5> :call CompileRun()<CR> map <F6> :call Run()<CR> map <C-F5> :call Debug()<CR> :set number" Vim color file " Maintainer: Bram Moolenaar <Bram@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 endiflet 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 > 8hi 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 ( ()<ESC>i inoremap [ []<ESC>i inoremap { {<CR>}<ESC>kA<CR> " inoremap < <><ESC>imap <f2> :call SetTitle()<CR> 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 <iostream>') let l = l + 1 | call setline(l, '#include <cstdio>') let l = l + 1 | call setline(l, '#include <cstdlib>') let l = l + 1 | call setline(l, '#include <cstring>') let l = l + 1 | call setline(l, '#include <cmath>') let l = l + 1 | call setline(l, '#include <algorithm>') let l = l + 1 | call setline(l, '#include <string>') let l = l + 1 | call setline(l, '#include <vector>') let l = l + 1 | call setline(l, '#include <stack>') let l = l + 1 | call setline(l, '#include <queue>') let l = l + 1 | call setline(l, '#include <set>') let l = l + 1 | call setline(l, '#include <time.h>') 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總結
以上是生活随笔為你收集整理的windows配置gvim高效率编程(cc++)带自动补全代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker入门到精通开发指南(一文搞懂
- 下一篇: HugeGraph 配置参数