这是我长时间使用vim总结的一些配置,分享给有需要的人。可以支持编译一键编译并执行C、C++和Java(需要安装编译器并配置环境变量),具体的使用方法,在下面的配置文件中讲的很详细。另外,在Linux上默认使用的clang的编译器,这种编译器可以兼容gcc的大部分选项,并且编译速度更快,提示更加友好,您也可以根据自己的需要改成自己喜欢的编译器。
我是在Windows7下测试的,所以Windows7系统直接可用。其中的插件与配置文件在 Linux 下同样适用。如果您是XP的用户,可能会出现Consolas字体找不到的情况,可以从Windows7系统拷贝,或者到去下载。对于其他系统(UNIX,MAC)的用户直接将下载到的文件解压,把插件目录和配置文件覆盖掉原来的文件即可。在Linux下,需要把插件目录重新命名为 .vim,配置文件重新命名为 .vimrc。建议您全新安装vim,仅仅拷贝配置文件和插件目录。
使用vim已经有快4年的时间了,从最初的排斥到现在的爱不释手,这段心路历程非常奇特。vim是一个非常奇特、精致的编辑器,是一个可以最大限度发挥人的智慧的编辑器。通过使用恰当的插件,完全可以秒杀其他昂贵而又笨重的IDE。然而最重要的是,它是免费的。这种免费充满了理想主义色彩,更难能可贵的是它有非常实用,这或许就是理想与现实的结合吧。
分享一下我使用vim的心得:对于一个初学者,不要过于深入的去钻研的vim配置,而最重要的就是要把vim用起来。所以,一开始,尽可以去网上找一些别人的配置文件为己所用,不要去深究这些配置具体的原理。我最一开始就是这样做的。作为一个软件,最大的价值就是可以提高人的效率,而如果在使用的同时还充满了快乐,那不是更好了吗?
下载连接:http://pan.baidu.com/s/1kT9WTvT
" ----------------- Author: Light" ----------------- Email: Black_Art@outlook.com" ----------------- Date: 2015-05-04 00:02:05"********************************encoding**************************************"默认为 UTF-8 编码set encoding=utf-8set fileencoding=utf-8set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1set fileencoding=utf-8 let &termencoding=&encoding"********************************ui**************************************"字体/配色"以下为解决中文显示问题,以及相应带来的提示及菜单乱码问题set encoding=utf-8 " 设置vim内部使用的字符编码,原来是cp936lang messages zh_CN.UTF-8 " 解决consle输出乱码 "解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vimcolorscheme molokaiset guifont=Source\ Code\ Pro:h11.5,Consolas:h16"去掉工具条、菜单栏、滚动条"set go=aAce "set guioptions-=m set shm+=Iset guioptions-=T"高亮光标所在的行set cursorline" 自动最大化窗口if has('gui_running') au GUIEnter * simalt ~x "给 Win32 下的 gVim 窗口设置透明度 au GUIEnter * call libcallnr("vimtweak.dll", "SetAlpha", 237)endif"********************************language**************************************"语言中文language chineselanguage messages zh_CN.utf-8"********************************system**************************************"保留Ctrl+A/c/v操作"source $VIMRUNTIME/mswin.vim"与windows共享剪贴板set clipboard+=unnamed"保留历史记录set history=500"导入删除菜单脚本,删除乱码的菜单source $VIMRUNTIME/delmenu.vim"导入正常的菜单脚本source $VIMRUNTIME/menu.vim set nocompatible"Diff 模式的时候鼠标同步滚动 for Vim7.3if has('cursorbind') set cursorbindend"********************************setting**************************************" 行控制set linebreakset textwidth=80set wrap"带如下字符不换行set iskeyword+=_,$,@,%,#,-"标签页set tabpagemax=9set showtabline=2"控制台响铃set noerrorbellsset novisualbellset t_vb= "close visual bell"行号和标尺set numberset rulerset rulerformat=%15(%c%V\ %p%%%)"命令行于状态行set ch=1set ls=2 " 始终显示状态行set wildmenu "命令行补全以增强模式运行"高亮、实时搜索set hlsearch set magic set showmatch set mat=2 set incsearchset ignorecase"制表符set tabstop=4set expandtabset smarttabset shiftwidth=4set softtabstop=4"状态栏显示目前所执行的指令set showcmd "缩进set autoindentset smartindent"自动重新读入set autoread"插入模式下使用 <BS>、<Del> <C-W> <C-U>set backspace=indent,eol,start"设定在任何模式下鼠标都可用set mouse=a"自动改变当前目录set autochdir"备份和缓存set nobackupset noswapfile"自动完成set complete=.,w,b,k,t,iset completeopt=longest,menu"定义 <Leader> 为逗号let mapleader = ","let maplocalleader = ",""保证语法高亮syntax enablesyntax onfiletype plugin indent on"********************************mapping**************************************"标签页操作nmap nt :tabnew<cr>:NERDTreeToggle<cr><c-w>wnmap tg :tabprevious<cr>nmap nc :tabclose<cr>"去掉查找后的高亮nmap nh :noh<cr>"转换文件类型nmap 'h :set filetype=html<cr>nmap 'j :set filetype=javascript<cr>nmap 'c :set filetype=css<cr>"在行尾添加;nmap ; $A;<ESC>"在行尾添加,nmap <leader><leader> $A,<ESC>"另存为nmap ss :browse confirm saveas<cr>"切换窗口nmap tt <c-w>w"新窗口打开配置文件nmap <leader>e :tabnew $VIM/_vimrc<cr>" 按下 Q 不进入 Ex 模式,而是退出nmap Q :x<cr>"Tabularize插件对齐快捷键nmap <Leader>te :Tabularize /=<CR>nmap <Leader>tm :Tabularize /:<CR>"排序注释nmap <Leader>tc :Tabularize /\/\/<CR>"搜索nmap <Leader>n :cnext<cr>nmap <Leader>p :cprev<cr>nmap <Leader>l :clist<cr>nmap <Leader>w :cw<cr>"********************************plugin**************************************"插件快捷键nmap ne :NERDTreeToggle<cr>"NERDTree配置let NERDTreeDirArrows=1 "目录箭头 1 显示箭头 0传统+-|号"neocomplcache配置let g:neocomplcache_enable_at_startup = 1 let g:neocomplcache_enable_camel_case_completion = 1 "doxygen配置let g:DoxygenToolkit_authorName="qinjia"let g:DoxygenToolkit_briefTag_funcName="yes"let g:doxygen_enhanced_color=1let g:DoxygenToolkit_paramTag_pre="@Param " let g:DoxygenToolkit_returnTag="@Returns "nmap <Leader>d :Dox<cr>nmap <Leader>b :DoxAuthor<cr>"********************************syntax**************************************" JavaScript 语法高亮au FileType html,javascript let g:javascript_enable_domhtmlcss = 1au BufRead,BufNewFile *.js set syntax=jquery" 给各语言文件添加 Dictlet s:dict_dir = $VIM.'\vimfiles\dict\'let s:dict_dir = "setlocal dict+=".s:dict_dirau FileType html exec s:dict_dir."html.dict"au FileType css,html exec s:dict_dir."css.dict"au FileType javascript,html exec s:dict_dir."javascript.dict"au FileType javascript set dictionary+=$VIM.'\vimfiles\dict\node.dict'" 将指定文件的换行符转换成 dos 格式au FileType php,javascript,html,xml,json,css,txt,vim,vimwiki set ff=dos"********************************function**************************************" 获取当前目录"func! GetPWD() "return substitute(getcwd(), "", "", "g")"endf "------------------------------------------------------------------------------" < 判断操作系统是否是 Windows 还是 Linux >"------------------------------------------------------------------------------if(has("win32") || has("win64") || has("win95") || has("win16")) let g:iswindows = 1else let g:iswindows = 0endif "------------------------------------------------------------------------------" < 判断是终端还是 Gvim >"------------------------------------------------------------------------------if has("gui_running") let g:isGUI = 1else let g:isGUI = 0endif " -----------------------------------------------------------------------------" < 编译、连接、运行配置 (目前只配置了C、C++、Java语言)>" -----------------------------------------------------------------------------" F9 一键保存、编译、连接存并运行nmap <F9> :call Run()<CR>imap <F9> <ESC>:call Run()<CR> " Ctrl + F9 一键保存并编译nmap <c-F9> :call Compile()<CR>imap <c-F9> <ESC>:call Compile()<CR> " Ctrl + F10 一键保存并连接nmap <c-F10> :call Link()<CR>imap <c-F10> <ESC>:call Link()<CR> let s:LastShellReturn_C = 0let s:LastShellReturn_L = 0let s:ShowWarning = 1let s:Obj_Extension = '.o'let s:Exe_Extension = '.exe'let s:Class_Extension = '.class'let s:Sou_Error = 0 let s:windows_CFlags = 'gcc\ -fexec-charset=gbk\ -Wall\ -g\ -std=c11\ -O0\ -c\ %\ -o\ %<.o'let s:linux_CFlags = 'clang\ -Wall\ -g\ -O0\ -std=c11\ -c\ %\ -o\ %<.o' let s:windows_CPPFlags = 'g++\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'let s:linux_CPPFlags = 'clang++\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:JavaFlags = 'javac\ %' func! Compile() exe ":ccl" exe ":update" let s:Sou_Error = 0 let s:LastShellReturn_C = 0 let Sou = expand("%:p") let v:statusmsg = '' if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension let Obj_Name = expand("%:p:t:r").s:Obj_Extension if !filereadable(Obj) || (filereadable(Obj) && (getftime(Obj) < getftime(Sou))) redraw! if expand("%:e") == "c" if g:iswindows exe ":setlocal makeprg=".s:windows_CFlags else exe ":setlocal makeprg=".s:linux_CFlags endif echohl WarningMsg | echo " compiling..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" if g:iswindows exe ":setlocal makeprg=".s:windows_CPPFlags else exe ":setlocal makeprg=".s:linux_CPPFlags endif echohl WarningMsg | echo " compiling..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Obj_Name"is up to date" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension let class_Name = expand("%:p:t:r").s:Class_Extension if !filereadable(class) || (filereadable(class) && (getftime(class) < getftime(Sou))) redraw! exe ":setlocal makeprg=".s:JavaFlags echohl WarningMsg | echo " compiling..." silent make redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""class_Name"is up to date" endif else let s:Sou_Error = 1 echohl WarningMsg | echo " please choose the correct source file" endif exe ":setlocal makeprg=make"endfunc func! Link() call Compile() if s:Sou_Error || s:LastShellReturn_C != 0 return endif if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let s:LastShellReturn_L = 0 let Sou = expand("%:p") let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension let Exe_Name = expand("%:p:t:r").s:Exe_Extension else let Exe = expand("%:p:r") let Exe_Name = expand("%:p:t:r") endif let v:statusmsg = '' if filereadable(Obj) && (getftime(Obj) >= getftime(Sou)) redraw! if !executable(Exe) || (executable(Exe) && getftime(Exe) < getftime(Obj)) if expand("%:e") == "c" setlocal makeprg=gcc\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" setlocal makeprg=g++\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_L = v:shell_error endif if g:iswindows if s:LastShellReturn_L != 0 exe ":bo cope" echohl WarningMsg | echo " linking failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " linking successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " linking successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Exe_Name"is up to date" endif endif setlocal makeprg=make elseif expand("%:e") == "java" return endifendfunc func! Run() let s:ShowWarning = 0 call Link() let s:ShowWarning = 1 if s:Sou_Error || s:LastShellReturn_C != 0 || s:LastShellReturn_L != 0 return endif let Sou = expand("%:p") if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension else let Exe = expand("%:p:r") endif if executable(Exe) && getftime(Exe) >= getftime(Obj) && getftime(Obj) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!%<.exe" else if g:isGUI exe ":!gnome-terminal -x bash -c './%<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; ./%<" endif endif redraw! echohl WarningMsg | echo " running finish" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension if getftime(class) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!java %<" else if g:isGUI exe ":!gnome-terminal -x bash -c 'java %<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; java %<" endif endif redraw! echohl WarningMsg | echo " running finish" endif endifendfunc