声明:本文转载自www.vimer.cn
具体功能如下:
1.按F5编译单个文件,支持C,C++,C#,也可以支持java。
2.获取编译器错误描述,在错误描述上回车,可以直接跳转到错误行。
先贴上代码,可以看出,我把C#相关的注释掉了,实际上C#也是支持的,有需要的朋友可以去掉注释,还是可以编译C#的。
"
单个文件编译
map <F5> :call Do_OneFileMake()<CR>
function Do_OneFileMake()
if expand( " % :p:h " )!=getcwd()
echohl WarningMsg | echo " Fail to make! This file is not in the current dir ! Press < F7 > to redirect to the dir of this file . " | echohl None
return
endif
let sourcefileename=expand( " % :t " )
if (sourcefileename== "" || (&filetype!= " cpp " && &filetype!= " c " ))
echohl WarningMsg | echo " Fail to make! Please select the right file! " | echohl None
return
endif
let deletedspacefilename=substitute(sourcefileename,' ','','g')
if strlen(deletedspacefilename)!=strlen(sourcefileename)
echohl WarningMsg | echo " Fail to make! Please delete the spaces in the filename! " | echohl None
return
endif
if &filetype== " c "
if g:iswindows==1
set makeprg=gcc\ -o\ %<.exe\ %
else
set makeprg=gcc\ -o\ %<\ %
endif
elseif &filetype== " cpp "
if g:iswindows==1
set makeprg=g++\ -o\ %<.exe\ %
else
set makeprg=g++\ -o\ %<\ %
endif
" elseif &filetype == " cs "
" set makeprg=csc\ \/nologo\ \/out:%<.exe\ %
endif
if(g:iswindows==1)
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)
,'.exe','g')
let toexename=outfilename
else
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)
,'','g')
let toexename=outfilename
endif
if filereadable(outfilename)
if(g:iswindows==1)
let outdeletedsuccess=delete(getcwd(). " \\ " .outfilename)
else
let outdeletedsuccess=delete( " ./ " .outfilename)
endif
if(outdeletedsuccess!=0)
set makeprg=make
echohl WarningMsg | echo " Fail to make! I cannot delete the " .outfilename | echohl None
return
endif
endif
execute " silent make "
set makeprg=make
execute " normal : "
if filereadable(outfilename)
if(g:iswindows==1)
execute " ! " .toexename
else
execute " ! ./ " .toexename
endif
endif
execute " copen "
endfunction
" 进行make的设置
map < F6 > :call Do_make ()< CR >
map < c-F6 > :silent make clean < CR >
function Do_make ()
set makeprg = make
execute " silent make "
execute " copen "
endfunction
map <F5> :call Do_OneFileMake()<CR>
function Do_OneFileMake()
if expand( " % :p:h " )!=getcwd()
echohl WarningMsg | echo " Fail to make! This file is not in the current dir ! Press < F7 > to redirect to the dir of this file . " | echohl None
return
endif
let sourcefileename=expand( " % :t " )
if (sourcefileename== "" || (&filetype!= " cpp " && &filetype!= " c " ))
echohl WarningMsg | echo " Fail to make! Please select the right file! " | echohl None
return
endif
let deletedspacefilename=substitute(sourcefileename,' ','','g')
if strlen(deletedspacefilename)!=strlen(sourcefileename)
echohl WarningMsg | echo " Fail to make! Please delete the spaces in the filename! " | echohl None
return
endif
if &filetype== " c "
if g:iswindows==1
set makeprg=gcc\ -o\ %<.exe\ %
else
set makeprg=gcc\ -o\ %<\ %
endif
elseif &filetype== " cpp "
if g:iswindows==1
set makeprg=g++\ -o\ %<.exe\ %
else
set makeprg=g++\ -o\ %<\ %
endif
" elseif &filetype == " cs "
" set makeprg=csc\ \/nologo\ \/out:%<.exe\ %
endif
if(g:iswindows==1)
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)
,'.exe','g')
let toexename=outfilename
else
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)
,'','g')
let toexename=outfilename
endif
if filereadable(outfilename)
if(g:iswindows==1)
let outdeletedsuccess=delete(getcwd(). " \\ " .outfilename)
else
let outdeletedsuccess=delete( " ./ " .outfilename)
endif
if(outdeletedsuccess!=0)
set makeprg=make
echohl WarningMsg | echo " Fail to make! I cannot delete the " .outfilename | echohl None
return
endif
endif
execute " silent make "
set makeprg=make
execute " normal : "
if filereadable(outfilename)
if(g:iswindows==1)
execute " ! " .toexename
else
execute " ! ./ " .toexename
endif
endif
execute " copen "
endfunction
" 进行make的设置
map < F6 > :call Do_make ()< CR >
map < c-F6 > :silent make clean < CR >
function Do_make ()
set makeprg = make
execute " silent make "
execute " copen "
endfunction
主要介绍如下几点:
1.如果是windows用户,需要安装mingw,并且将他的bin目录添加到对应的环境变量里。
2.g:iswindows 是个我定义的全局变量,用来判断系统是linux还是windows,这样就不用写两套vimrc了,实现如下:
3.makeprg 是vim内置的编译命令,可以通过更改来实现编译对应类型文件。具体可参考vim官方说明文件。
4.最后的copen是打开quickfix,在错误描述上回车,可以直接跳转到错误行。
if
(
has
(
"
win32
"
)
|| has
(
"
win95
"
)
|| has
(
"
win64
"
)
|| has
(
"
win16
"
))
let g :iswindows = 1
else
let g :iswindows = 0
endif
let g :iswindows = 1
else
let g :iswindows = 0
endif