vim 一键编译单个源文件

声明:本文转载自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

主要介绍如下几点:
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



posted @ 2011-04-07 00:43  左手写诗  阅读(1209)  评论(0)    收藏  举报