开始用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=
  8. else
  9. let g:iswindows=
  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==
  34. set makeprg=gcc\ -o\ \"%<.exe\"\ \"%\"
  35. else
  36. set makeprg=gcc\ -o\ \"%<\"\ \"%\"
  37. endif
  38. elseif &filetype=="cpp"
  39. if g:iswindows==
  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==)
  49. let outdeletedsuccess=delete(outfilename)
  50. else
  51. let outdeletedsuccess=delete("./".outfilename) "doesn't work
  52. endif
  53. "如果文件删除不了报错
  54. if(outdeletedsuccess!=)
  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==)
  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++的一键编译的更多相关文章

  1. vim添加一键编译

    引用来自: http://blog.chinaunix.net/uid-21202106-id-2406761.html; 事先声明,我使用的VIM完全是基于终端的,而不是gvim或vim-x11.因 ...

  2. gVim/Vim 一键编译、连接、运行 C/C++ 单文件

    用于Gvim 或 Vim 配置文件的一键编译与运行函数(注:需要机器上安装了GCC才行) 本代码只加入了对C/C++的编译与运行,如果要加入其语言的可以参考此代码加入即可 同时,本代码加入了对Wind ...

  3. 一键编译go文件命令.bat

    一键编译go文件命令.bat    , 请新建 一键编译go文件命令.bat    文件,放到你的xxx.go文件目录下 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 @e ...

  4. 如何让vim像IDE一样一键放大缩小字号?

    原创,转载请注明出处 在其他IDE中,比如codeblocks,按住ctrl,然后滑动鼠标滚轮就可以实现字体的放大缩小. 在强大的vim中code怎么能缺少这种功能?! 在vim插件库中查询一番,发现 ...

  5. vim+makefile入门编辑,编译,差错实例

    vim+makefile入门编辑,编译,差错实例 vim makefile 编译 编写代码,一般在vim中编辑完后,输入:wq,在命令行下输入g++ hello.cc -o hello ,出现问题,打 ...

  6. bat脚本:Java一键编译(Javac java)

    bat脚本:Java一键编译(Javac java) D:    是指D盘 javat是要编译的.java文件所在的文件夹 也就是D:\javat bat代码: :start COLOR 0A cls ...

  7. 如何使用Jetbrains Clion 在一个工程里 编译单个C++源文件 (实现一键编译且运行)

    这篇文章主要在下面这篇文章的基础上,先是实现了一键编译和一键运行两个单个功能,最后又进一步使用Clion自带的Custom Build Application实现编译且运行一键实现. https:// ...

  8. [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件

    在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么 ...

  9. Vim技能修炼教程(17) - 编译自己的Vim

    编译自己的Vim 前面我们已经对Vim有比较丰富的了解了.我们也知道Vim有很多编译时的选项,很多功能依赖于这些编译选项.其中最重要的就是脚本语言的支持,很多发行版本是不全的.为了支持我们所需要的功能 ...

随机推荐

  1. 【题解】警位安排( 树形 DP)

    [题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...

  2. 【转】HTML5游戏开发经典视频教程、电子书汇总

    HTML5游戏开发经典视频教程.电子书汇总 HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某 ...

  3. cocos2d&amp;cocos2dx学习资源

    汇总一下自己学习Cocos2d和cocos2dx认为比較好的一些资源: 书籍: <iPhone&iPad cocos2d游戏开发实战> Steffen Itterheim < ...

  4. [AngularJS] Sane, scalable Angular apps are tricky, but not impossible.

    Read fromhttps://medium.com/@bluepnume/sane-scalable-angular-apps-are-tricky-but-not-impossible-less ...

  5. LINUX内核调度器+linux 内存

    http://www.cnblogs.com/tolimit/p/4303052.html

  6. SQLLite 简介

    [1] SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内 ...

  7. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  8. Eclipse 每行 80 字符限制的提示线

    有时候希望eclipse和C++编辑器之类有条对齐线 打开 Eclipse, Windows -> Prefereces -> General -> Editors -> Te ...

  9. java中关于public class

    在编写类的时候可以使用两种方式定义类:     public class定义类:     class定义类: 1,如果一个类声明的时候使用了public class进行了声明,则类名称必须与文件名称完 ...

  10. xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Deve

    以上错误是因为安装了 xcode , 但并不是系统默认的位置, 所以可以使用以下命令把 xcode 的路径修改为你安装的位置即可 sudo xcode-select --switch /Applica ...