首页 > 代码库 > Vim C/C++的一键编译
Vim C/C++的一键编译
开始用Vim差不多有两个月的时间, 一开始用Makefile 编译一整个项目无压力, 但是当写到单个文件的时候, 编译就比较麻烦了, 每次都得
:w
:!gcc -o 1.exe 1.c
:!1
非常麻烦...所以我都直接用的Code::Blocks...其实比Vim快多了哈哈...
但是昨晚折腾病发作, 想好好来配置一下, 于是花了一个晚上...改了一个能看得过去的一键编译.
原来的代码出自: http://www.vimer.cn/2009/10/11.html 这个域名好羡慕...
觉得他考虑的东西太多而且不好用, 自己折腾了折腾.
所幸vim的帮助文件非常全面, 改动他并不是难事.
代码及注释如下:
1 "单个文件编译 Linux 下大概有问题
2 "
3 "
4 map <F9> :call Do_OneFileMake()<CR>
5 "判断操作系统
6 if(has("win32") || has("win95") || has("win64") || has("win16"))
7 let g:iswindows=1
8 else
9 let g:iswindows=0
10 endif
11 "函数体
12 function Do_OneFileMake()
13 "关闭之前可能存在的QucikFix窗口
14 execute "cclose"
15 "判断文件路径和工作目录是否相同(其实我也不知道为什么要判断
16 if expand("%:p:h")!=getcwd()
17 echohl WarningMsg | echo "Fail to make! This file is not in the current dir! " | echohl None
18 return
19 endif
20 "sourcefilename 功能未知, 判断该类型是否被支持
21 let sourcefileename=expand("%:t")
22 if (sourcefileename=="" || (&filetype!="cpp" && &filetype!="c"))
23 echohl WarningMsg | echo "Fail to make! Please select the right file!" | echohl None
24 return
25 endif
26 "编译前先保存
27 exec "w"
28 "设置make参数,
29 "Linux 和 Windows的情况不同, Linux的执行是./*.out Windows的是 *.exe Linux 下的没有经过测试o
30 "makeprg 是 make的参数, 如果 makeprg=make 就执行真正的make.exe, 寻找目录下的makefile, 如果不是make的话这个参数就相当于makefile 的内容, 但是无论如何错误信息都会被送到QuickFix窗口.(暂时的粗浅理解
31 "makeprg中空格和双引号都需要用反斜杠"\"转义
32 if &filetype=="c"
33 if g:iswindows==1
34 set makeprg=gcc\ -o\ \"%<.exe\"\ \"%\"
35 else
36 set makeprg=gcc\ -o\ \"%<\"\ \"%\"
37 endif
38 elseif &filetype=="cpp"
39 if g:iswindows==1
40 set makeprg=g++\ -o\ \"%<.exe\"\ \"%\"
41 else
42 set makeprg=g++\ -o\ \"%<\"\ \"%\"
43 endif
44 endif
45 "删除旧文件, outfilename是生成程序的完整路径
46 let outfilename=expand("%:r").".exe"
47 if filereadable(outfilename)
48 if(g:iswindows==1)
49 let outdeletedsuccess=delete(outfilename)
50 else
51 let outdeletedsuccess=delete("./".outfilename) "doesn‘t work
52 endif
53 "如果文件删除不了报错
54 if(outdeletedsuccess!=0)
55 set makeprg=make
56 echohl WarningMsg | echo "Fail to make! I cannot delete the ".outfilename | echohl None
57 return
58 endif
59 endif
60 "静默编译, silent 关键字用于静默执行
61 execute "silent make"
62 set makeprg=make
63 "编译后如果文件存在,说明编译成功, 执行之
64 if filereadable(outfilename)
65 if(g:iswindows==1)
66 execute "!\"%<.exe\""
67 return
68 else
69 execute "!\"./%<.out\""
70 return
71 endif
72 endif
73 "不成功弹出错误信息, 即QuickFix窗口
74 execute "silent copen 6"
75 endfunction
以上.
Vim C/C++的一键编译