前言: 用vim也有几年了,从windows开发到Linux,从在校大学生到在职员工,始终想为这个过程记录点什么,为一直陪伴自己的vim,也为自己。
之前在百度贴吧混迹过,结果发的代码全被判定为非法字符,于是打消了在百度发展的计划,而只在上面留了一个QQ号码,结果问问题的人却络绎不绝,我想也许,是该开个博客,不敢说教授,就是分享一下自己的经验吧,希望对感兴趣的各位有所帮助。
这是这个博客的第一篇日志,所以就写个Vimer们经常会遇到的一个需求吧----一键编译单个源文件。ps:本站所有文章都是直接通过vim编写的哦。
具体功能如下:
1.按F5编译单个文件,支持C,C++,C#,也可以支持java。
2.获取编译器错误描述,在错误描述上回车,可以直接跳转到错误行。
先贴上代码,可以看出,我把C#相关的注释掉了,实际上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了,实现如下:
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:iswindows=1
else
let g:iswindows=0
endif
3.makeprg 是vim内置的编译命令,可以通过更改来实现编译对应类型文件。具体可参考vim官方说明文件。
4.最后的copen是打开quickfix,在错误描述上回车,可以直接跳转到错误行。
herryoli on #
恩学习啦,博主很强大,以后常来学习啦
Reply
Dante on #
哈哈,多谢捧场啊~~~
Reply
SuperSonic on #
Hi there,
It agree, very amusing opinion
Thanks
<a href="http://www.fd3la.com/" rel="nofollow">SuperSonic</a>
Reply
Dougles on #
Greatings, Interesting, did you plan to continue this article?
Thank you
<a href="http://www.fd3la.com/" rel="nofollow">Dougles</a>
Reply
isunbo on #
有了这个实在是方便多了.但是有一点我有些不明白,我学习C语言的时候养成了一个坏习惯,比如定义一个变量并赋值我会这么写"int i = 10",之后,我把上面的代码写到vimrc文件里的时候就出问题了.比如这个
set makeprg = gcc\ -o\ %<.exe\ %;后来看到报错就把vimrc文件里所有等号两边的空格都给去掉了.哎,刚刚学着用,总是各种莫名其妙的错误啊.
Reply
Dante on #
呵呵,vim的脚本的确有些严格啊,呵呵,习惯了就好啦~~~
Reply
asnahu on #
只要c/c++环境,MinGW需要是完整安装码?
Reply
Dante on #
因为我当时是直接默认全安装的,如果想要删掉一些功能还真的没有尝试过,其实也不大,全装也没有问题吧
Reply
asnahu on #
谢谢这么快恢复,问题已经解决。^_^
Reply
Loaden on #
楼主神人!学习来了。
谢谢!
Reply
Dante on #
哈哈,不客气~
Reply
YE on #
博主很强大。弱弱的问一句,我把这些代码拷贝到vimrc,把中文单双引号替换掉,但按下F5仍是会出现一些错误,比如第31行:E115缺少引号:'\(\.[^.]*\).我是菜鸟,代码看不懂,可以添加一些注释或者把这段代码做个txt作为附件吗,网页上拷贝的字符会变化
Reply
Dante on #
额,会这样啊,好的,我传一个txt文档在文章最后把,你再试试啊~
Reply
YE on #
好人啊
Reply
Dante on #
呵呵,分享创造价值~
Reply
vimer新人 on #
您好 我把您的配置加入到自己的配置文件中,结果按下F6显示“|| 'make' 不是内部或外部命令,也不是可运行的程序
|| 或批处理文件” 按F5显示“Fail to make! This file is not in the current dir! press to redirect to the dir of this file.“ 如何解决。我编辑的cs文件.谢谢
Reply
Dante on #
呃,就是你打开的文件并不是你vim工作的当前目录。
用:pwd看一下,你当前的目录是和文件目录相同不,如果不相同需要用:cd xxx命令,cd过去
Reply
vimer新人 on #
ok 我在试一下。谢谢,没想到这么快回复。
Reply
wbd on #
学习了,楼主很强
Reply
vim fan on #
楼主,你把简单的东西写的挺复杂。。。。
Reply
Dante on #
呵呵,很久之前的代码了……,能用就一直没有管,欢迎博友将自己的配置贴上来,我更新一下~
Reply
david on #
出现如下错误,解决不了,请博主看看:
Error detected while processing function Do_OneFileMake:
line 35:
E115: Missing quote: '\(\.[^.]*\)
E116: Invalid arguments for function substitute(sourcefileename,'\(\.[^.]*\)
E15: Invalid expression: substitute(sourcefileename,'\(\.[^.]*\)
line 36:
E20: Mark not set
line 37:
E121: Undefined variable: outfilename
E15: Invalid expression: outfilename
line 39:
E121: Undefined variable: outfilename
E116: Invalid arguments for function filereadable(outfilename)
line 54:
E121: Undefined variable: outfilename
E116: Invalid arguments for function filereadable(outfilename)
E15: Invalid expression: filereadable(outfilename)
Reply
Dante on #
你能给我发邮件看一下你copy的函数,好像我的博客会把引号变成全角符号……
邮箱点击一下上面的留言就能看到。
Reply
Lees on #
楼主你好,我想问一下在windows下用VIM能够断点运行么?能的话能否告之?谢谢了
Reply
wuyuan on #
我也有这个问题,后来下载的txt文件再复制一下就好了
Reply
frankvictor on #
line 54:
E121: Undefined variable: outfilename
E116: Invalid arguments for function filereadable(outfilename)
E15: Invalid expression: filereadable(outfilename)
出现这个错误,请问是怎么回事啊,考的附件txt中的代码
Reply
Dante on #
给我发下邮件我看一下?怀疑是哪个地方换行了。邮箱在博客的留言板页面~
Reply
Nirocfz on #
同样出现这个问题,不知道咋回事
Reply
Dante on #
尝试一下附件中的txt文件?
Reply
Nirocfz on #
我把关于 g:iswindows 的if分支语句都注释掉了,只留下else之后给linux的语句,就正常了。
还有个问题是在终端里的vim,按F5编译结果出来之后,只有quickfix窗口的显示的还算正常,要刷新一次窗口才全部正常显示,在函数最后加了个redraw! ,效果还算满意,不过我不懂vim语法,不知道合不合适
Reply
Dante on #
呵呵,在终端里显示花屏是很正常的,可以用redraw!来强制刷新,不过我一般就CTRL+L来刷新一下就行了~
Reply
Wenson on #
解决了。。
哈哈,少拷了点代码。。
汗 - - !
Reply
Wenson on #
为什么我把那个都给注释掉,还是出现这个问题啊~~~
抓狂
Reply
执着的初心 on #
哪里有qq号。。。。
Reply
执着的初心 on #
博主很强大啊。
我是个初学者。vim的代码有的还看不懂。
你这个是编译c++的。我是做FPGA的,要用modelsim来编译VHDL或者Verilog文件。所以还得自己动手修改才行。
不知道能不能给源代码做个注释让我参考下?尤其是比如:\(\.[^.]*\) 真的没看懂。。。
Reply
Dante on #
呃,你说的语言我就听说过VHDL。。。
\(\.[^.]*\) 的意思是.exe之类的后缀,比如.exe.bk 就会匹配.bk。
Reply
Dante on #
其实代码很简单的,建议简单学习一下vim的脚本,只要学过普通的脚本语言应该都不难~
Reply
执着的初心 on #
最近稍微学习了一下,自己写了一个modesim的。
支持verilog和vhdl,其他的编译器需要自己设置错误识别,这个比较恶心。
最后的窗口我用的:cw命令。有错误显示,没错误就不显示了。
Reply
Dante on #
哈哈,恭喜恭喜。
其实错误识别写起来还是挺容易的,在vim里面输入
:h errorformat
介绍的挺清楚的。
Reply
oatmeal on #
博主,能不能介绍一下vim怎么联立gbd调试单个文件的?
谢谢了,实现的功能就是查看变量,断点,分步执行就好了
Reply
Dante on #
呃,这个真没尝试过。。。倒是可以看看这边文章:
http://www.vimer.cn/2010/06/%E5%9C%A8vimgvim%E4%B8%AD%E8%BF%90%E8%A1%8C%E7%BB%88%E7%AB%AF%E5%AF%B9%E4%BD%A0%E6%B2%A1%E6%9C%89%E7%9C%8B%E9%94%99%E6%88%91%E4%B9%9F%E6%B2%A1%E6%9C%89%E5%86%99%E5%8F%8D.html
实现了Vim中托管所有的命令行操作。。
Reply
可可火山 on #
gbdtui 挺好用的,默认一半源代码一半调试窗。
另外我也使用makeprg来编译单个文件或者工程,
有个makeprgs.vim的插件也做类似的事情,能自己判断是Makefile,ant java工程。我就自己稍微改了下来编译debug的c++程序。
Reply
xiaoquan09 on #
跟着 博主 学习
Reply
zhanglistar on #
8错哈 我都是手写makeprg的。
lz的vim功底深厚啊。
Reply
cigerma on #
楼主,问下vim如何判断前一个命令是否成功执行
比如在这一步:
if filereadable(outfilename)
execute "!./".toexename
endif
在它出错后执行execute "copen"
成功的时候则不执行
这个该怎么做?
Reply
Dante on #
呃,外部命令恐怕不行哦,只能通过间接的方式,比如判断命令创建的文件成功与否等等
Reply
cigerma on #
汗,其实改成:
if filereadable(outfilename)
execute “!./”.toexename
else
execute "copen"
endif
就行了!
Reply
nan on #
请教博主,如果希望实现一键编译,但是要求在\build文件夹里执行make命令,应当如何修改Vim脚本呢?
Reply
Dante on #
不好意思,今天一直都在忙。
想要更改编译目录的话,只需要执行:
cd ../build
即可,不过一键编译就是为了编译单个文件,如果要写复杂的工程的话,还是用makefile比较好。
Reply
Springlie on #
博主您好,我安装了MinGW,并将bin放入系统变量。尝试编译后发现,用C++风格引入的头文件找不到,比如:
#include
#include
using namespace std;
如果将string改成C风格的string.h,就可以找到。
我到MinGW的include中发现,只有string.h,没有string,也没有vector之类的文件。可能是由于这个原因找不到。
弱问:如何解决上述问题,在vim里正常编译这些文件?
Reply
Dante on #
被转义了。。。
呃,是不是mingw的版本问题?或者你是用gcc还是g++编译的?
c++风格的要用g++编译。
Reply
Springlie on #
C++风格的文件是用g++编译的。
mingw应该已经是最新的了,是在http://sourceforge.net/projects/mingw/files_beta/ 下载的。
可疑的地方就是:MinGW的include中,只有string.h文件,没有string文件。我翻看UNIX和VC的相应位置,两个文件是都该具备的。
Reply
Dante on #
C:\MinGW\include\c++\3.4.5
C++的头文件在这个目录下哦,里面有string文件。
Reply
Springlie on #
谢谢及时回复。
但真相是:include下根本就没有C++目录。是因为mingw的版本问题么?
Reply
Dante on #
呃。。那就真不知道了。。我现在的版本里面是有的。。。是不是没有全部安装上?
Reply
kadyz on #
确实是版本问题,现在去下载的MinGW版本C++的头文件路径已经跟网络上普遍教程上说的不一样了。(我下载的是4.5.0)
我自己尝试配置的路径是:D:\MinGW\include;D:\MinGW\lib\gcc\mingw32\4.5.0\include;D:\MinGW\lib\gcc\mingw32\4.5.0\include\c++;D:\MinGW\lib\gcc\mingw32\4.5.0\include\c++\backward;D:\MinGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32
经过验证是可以编译C++的。
Reply
匿 on #
每次编译时要cd到相应目录,能否自动完成呢
Reply
匿 on #
找到了
set autochdir
Reply
noob on #
感谢博主的分享!但是在上面的代码中中没有不可以编译java吧?我在31行后直接加了
elseif &filetype=="java"
set makeprg=javac\ %
但是没有用。是不是还要作些修改呢?我不懂vim的语法,请多指教!
Reply
Dante on #
在vim中执行:
<pre lang="vim" line="1">
:h makeprg
</pre>
即可~~
Reply
noob on #
还请您详细指点一下java源代码怎么用quickfix,感激不尽,我不太想看帮助文件:)
Reply
吴健 on #
你好:
博主,按照你说的步骤我都设置好了,可编译时(按F6)会出现:call Do_make(),不知道怎么回事,快崩溃了
Reply
Dante on #
你好,用文末那个txt版的试一下?
Reply
kid7st on #
博主,那个txt文件是不是失效了
Reply
Dante on #
嗯,可能迁移网站给搞丢了。。。
直接用贴的代码就行,已经优化过的。
Reply
aruralgeek on #
let outfilename=substitute(sourcefileename,'\(\.[^.]*\),'.exe','g')
这句在网页显示出来 好像有错误吧。特别是被断行了,而且少个'。
我自己改为 let outfilename=substitute(sourcefileename,'\(\.[^.]*\)‘,'.exe','g') 就可以了。
还有,F5编译完后 如果程序修改了 再按F5就会出现错误Fail to make! Please select the right file!
不知如何解决。
Reply
Dante on #
感谢提醒! 的确被换行了
是不是设置了 autochdir?
Reply
aruralgeek on #
在每次F5之后 它的光标都会在调试信息的窗口,不管有没有错误,当光标在调试信息窗口的时候,整个窗口就是没有 文件名 状态,也就是上面显示是 [未命名]。如果要再通过F5编译运行 就要光标跳到编辑窗口,才有文件名。请问能不能设置 当跳到调试信息窗口的时候 文件名也是有的呢?而且,F5之前 先将当前文件保存了,不然它还是以之前的编译。谢谢了!
Reply
布拉德比特 on #
楼主啊,你的文件不提供下载了....
Reply
Dante on #
呃,空间搬迁了几次,都没了。。
就用贴的代码吧,可以正常运行的。
Reply
三十 on #
也是初学,看到上面都在说编译的过程报错,就仔细看了一下代码。
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)' ,'.exe','g')
let outfilename=substitute(sourcefileename,'\(\.[^.]*\)' ,'','g')
这两句博主少在'\(\.[^.]*\)的后面打了一个'加上就正常了。不知道对否
Reply
Dante on #
感谢提醒,已经修改~
Reply
xxx on #
博主啊不要乱听别人讲这个点根本就不应该加的可能它是用的LINUX才不正常,我用windows,得去掉那个点才正常,害苦我了。另外既然用到了g:iswindows博主为何不把g:iswindows这个变量加到文中呢,这个也害我弄了半天
Reply
xxx on #
let outfilename=substitute(sourcefileename,’\(\.[^.]*\)’ ,’.exe’,'g’)这里的那个点不应该加
Reply
xxx on #
博主是不是故意弄的有点问题好让我们来点击你博客啊!哈哈
Reply
Dante on #
哈哈,我不会那么坏啦
呃,主要是这段代码也很久不用了,所以当时也没多想,直接加上了。。
刚看了一下,确实不应该加,\)是一个整体,不该拆开的。
Reply
swust_long on #
博主:
谢谢你的分享!
我刚开始用vim,你那上面贴的代码还是有一点问题,前面的人已经说过了,我也都照看了,你好像把单引号加到右元括号前面去了;
outfilename=substitute(sourcefileename,'\(\.[^.]*\') ,'.exe','g')
let toexename=outfilename
else
let outfilename=substitute(sourcefileename,'\(\.[^.]*\') ,'','g')
Reply
nswutong on #
是这样的,希望博主改一下
<pre>’\(\.[^.]*\')
</pre>
后面那个单引号的位置错了
Reply
Dante on #
多谢,已经修改~
Reply
swust_long on #
顺便建议下楼主,把那个文件下载弄下吧;
直接复制容易出错。。。呵呵。。
Reply
Aikilis on #
赞!
我自己也弄了一个,但是有个小问题想请教博主。
我是F5编译,F6执行,F9编译+执行
问题就出在F9上。。我是直接把F9映射为。这样如果编译没通过的话还是会执行。。执行的以前编译的版本。。囧。。。请问该怎么改呢?谢谢!
Reply
Aikilis on #
额。。尖括号被吃掉了。。我是直接把F9映射为F5+F6
Reply
xxx on #
为什么不把open换成cw这样就可以有错误打开窗口,没错误不打开窗口。
另外我刚学编程,那个F6执行是什么意思是运行的意思吗
Reply
xxx on #
另外我想省了编译时要保存的这一步,所以在
if &filetype=="c"
……
w
set makeprg=gcc\ -o\ %<\ %
……
这里加了个w,这样好像可以实现直接保存后编译了,不知有什么不妥之处没有
Reply
Dante on #
嗯,没什么问题。
Reply
liaic on #
哈哈,成功学习博主的方法,做成了编译NCL的快捷键!非常感谢!
Reply
madper on #
ncl=脑残了? 哈哈哈~ 玩笑~
Reply
Isaac on #
首先感谢楼主,想问一下上面的配置有用到哪些vim的插件?
还有……我想我得把那些『if g : iswindows……』删了……洁癖……:P
Reply
Dante on #
呃,不需要别的插件哈。你说的是我之前的一个变量定义,删掉就可以了。
Reply
xcxinghai on #
我直接复制了您的代码,但是显示错误提示如下:
第 52 行:
E121: 未定义的变量: outfilename
E116: Invalid arguments for function filereadable(outfilename)
E15: 无效的表达式: filereadable(outfilename)
我的程序应该没问题的。
Reply
xcxinghai on #
解决了,原来我没有将下面判断是什么系统语句加上去。
Reply
zxiaotian on #
你好,请问这个代码高亮插件是什么?
Reply
Dante on #
wp_syntax
Reply
MKCC on #
有没办法自动添加MinGW的环境变量呢?让VIM和MinGW做一个整合.
之前看到有Code::blocks和MinGW的整合,用批处理文件过渡,想参照此法,可无奈不晓得vim如何往文件追加内容,在CMD下可以echo xxxx>>run.bat进行追加.不知博主是否有好的办法?
Reply
Dante on #
不理解,环境变量不是直接改系统就可以了么?
vim确实没有提供直接追加写文件的功能,但是vim支持各种语言来写脚本,比如python,就可以。
Reply
MKCC on #
蛋痛想搞win32绿色版gvim,所以才会这些想法.不过后来在一个外国网站找到办法了.
let $path="XX;".$path
例如我的做法是把MinGW放在vim目录下,然后
let $path=$VIM."\MinGW\bin;".$path
这样就整合到一起了.
Reply
zhuojun on #
请问可以一键编译运行多个C++文件吗?谢谢!
Reply
Dante on #
额,那就要自己写makefile了。。直接用make就行了。。
Reply
ayqs on #
if(has("win32") || has("win95") || has("win64") || has("win16"))
let g:iswindows=1
else
let g:iswindows=0
endif
楼主,这段代码是加到上面那一大段代码后面就行了吧
Reply
wangyang on #
楼主你好,我是个新手。
按照上面说的做完之后,我按F5,终端显示的是~这个字符,然后输入原文件的名字a.c后按回车,终端却显示这种结果
~a.c:command not found
这是怎么会是
Reply
Dante on #
命令没有绑定好。。
Reply
黄瓜皮 on #
我win下的c,cpp一键运行vimrc配置哈,查找当前目录下的可执行文件,如果找到多个就让用户选一个。如果有用望发散:
func! GetExeFilePwd()
let exes = glob("*.exe")
if stridx(exes, "\n") != -1
let charidx = 0
let exes_list = []
let prompt_idx = 1
let len = strlen(exes)
let t = -1
while t != len
let t = stridx(exes, "\n", charidx)
if t == -1
let t = len
endif
let exes_list = exes_list + [prompt_idx.". ".strpart(exes, charidx, t - charidx)]
let prompt_idx = prompt_idx + 1
let charidx = t + 1
endwhile
let exeidx = inputlist(["select file to execute"] + exes_list) - 1
if exeidx != -1
let exes = matchstr(get(exes_list, exeidx), '[a-zA-z]\+.exe')
endif
endif
return exes
endfun
func! Run()
let exes = GetExeFilePwd()
if exes != ""
execute "!".exes
endif
endfunc
func! Gdb()
let exes = GetExeFilePwd()
if exes != ""
exec "!gdb %<"
endif
endfunc
Reply
haoaina521 on #
最后的copen其实用cw比较好,如果有错误才打开quickfix。
Reply
显示 on #
为什么当程序有错时,编译后出现quickfix窗口,但程序源代码显示不出来,要用鼠标上下滑动才会显示出来?
Reply
木木菜 on #
诶~~~~会中文乱码怎么办?
Reply
song on #
"------------------------------------------------------------------------------
"
"------------------------------------------------------------------------------
" F9 一键保存、编译、连接存并运行
map :call Run()
imap :call Run()
" Ctrl + F9 一键保存并编译
map :call Compile()
imap :call Compile()
" Ctrl + F10 一键保存并连接
map :call Link()
imap :call Link()
let s:LastShellReturn_C = 0
let s:LastShellReturn_L = 0
let s:ShowWarning = 1
let s:Obj_Extension = '.o'
let s:Exe_Extension = '.exe'
let s:Sou_Error = 0
let s:windows_CFlags = 'gcc\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
let s:linux_CFlags = 'gcc\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
let s:windows_CPPFlags = 'g++\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
let s:linux_CPPFlags = 'g++\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o'
func! Compile()
exe ":ccl"
exe ":update"
if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx"
let s:Sou_Error = 0
let s:LastShellReturn_C = 0
let Sou = expand("%:p")
let Obj = expand("%:p:r").s:Obj_Extension
let Obj_Name = expand("%:p:t:r").s:Obj_Extension
let v:statusmsg = ''
if !filereadable(Obj) || (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\ %<\ %= getftime(Obj) && getftime(Obj) >= getftime(Sou)
redraw!
echohl WarningMsg | echo " running..."
if g:iswindows
exe ":!%<.exe"
else
if g:isGUI
exe ":!gnome-terminal -e ./%<"
else
exe ":!./%<"
endif
endif
redraw!
echohl WarningMsg | echo " running finish"
endif
endfunc
Reply
song on #
摘自http://zhidao.baidu.com/question/541064260.html?from=pubpage&msgtype=2不过怎么不能用
Reply
song on #
我windows7 gvim mingw 新手不知怎么搞
Reply
song on #
问题解决这个是完整版的http://www.oschina.net/code/snippet_574132_13351
Reply
小行 on #
|| 'g++' 不是内部或外部命令,也不是可运行的程序|| 或批处理文件博主,我是win7下的gvim,搞不清楚问题出在哪了。
Reply
Dante on #
win下需要装一下 mingw
Reply
小行 on #
如果已经安装了codeblocks,可以不以直接利用其目录下的mingw?
Reply
Dante on #
理论上是可以的,只是用来编译而已。
Reply
小行 on #
谢谢博主,成功了。
Reply