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的帮助文件非常全面, 改动他并不是难事.
代码及注释如下:
- "单个文件编译 Linux 下大概有问题
- "
- "
- map <F9> :call Do_OneFileMake()<CR>
- "判断操作系统
- if(has("win32") || has("win95") || has("win64") || has("win16"))
- let g:iswindows=
- else
- let g:iswindows=
- endif
- "函数体
- function Do_OneFileMake()
- "关闭之前可能存在的QucikFix窗口
- execute "cclose"
- "判断文件路径和工作目录是否相同(其实我也不知道为什么要判断
- if expand("%:p:h")!=getcwd()
- echohl WarningMsg | echo "Fail to make! This file is not in the current dir! " | echohl None
- return
- endif
- "sourcefilename 功能未知, 判断该类型是否被支持
- 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
- "编译前先保存
- exec "w"
- "设置make参数,
- "Linux 和 Windows的情况不同, Linux的执行是./*.out Windows的是 *.exe Linux 下的没有经过测试o
- "makeprg 是 make的参数, 如果 makeprg=make 就执行真正的make.exe, 寻找目录下的makefile, 如果不是make的话这个参数就相当于makefile 的内容, 但是无论如何错误信息都会被送到QuickFix窗口.(暂时的粗浅理解
- "makeprg中空格和双引号都需要用反斜杠"\"转义
- if &filetype=="c"
- if g:iswindows==
- set makeprg=gcc\ -o\ \"%<.exe\"\ \"%\"
- else
- set makeprg=gcc\ -o\ \"%<\"\ \"%\"
- endif
- elseif &filetype=="cpp"
- if g:iswindows==
- set makeprg=g++\ -o\ \"%<.exe\"\ \"%\"
- else
- set makeprg=g++\ -o\ \"%<\"\ \"%\"
- endif
- endif
- "删除旧文件, outfilename是生成程序的完整路径
- let outfilename=expand("%:r").".exe"
- if filereadable(outfilename)
- if(g:iswindows==)
- let outdeletedsuccess=delete(outfilename)
- else
- let outdeletedsuccess=delete("./".outfilename) "doesn't work
- endif
- "如果文件删除不了报错
- if(outdeletedsuccess!=)
- set makeprg=make
- echohl WarningMsg | echo "Fail to make! I cannot delete the ".outfilename | echohl None
- return
- endif
- endif
- "静默编译, silent 关键字用于静默执行
- execute "silent make"
- set makeprg=make
- "编译后如果文件存在,说明编译成功, 执行之
- if filereadable(outfilename)
- if(g:iswindows==)
- execute "!\"%<.exe\""
- return
- else
- execute "!\"./%<.out\""
- return
- endif
- endif
- "不成功弹出错误信息, 即QuickFix窗口
- execute "silent copen 6"
- endfunction
以上.
Vim C/C++的一键编译的更多相关文章
- vim添加一键编译
引用来自: http://blog.chinaunix.net/uid-21202106-id-2406761.html; 事先声明,我使用的VIM完全是基于终端的,而不是gvim或vim-x11.因 ...
- gVim/Vim 一键编译、连接、运行 C/C++ 单文件
用于Gvim 或 Vim 配置文件的一键编译与运行函数(注:需要机器上安装了GCC才行) 本代码只加入了对C/C++的编译与运行,如果要加入其语言的可以参考此代码加入即可 同时,本代码加入了对Wind ...
- 一键编译go文件命令.bat
一键编译go文件命令.bat , 请新建 一键编译go文件命令.bat 文件,放到你的xxx.go文件目录下 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 @e ...
- 如何让vim像IDE一样一键放大缩小字号?
原创,转载请注明出处 在其他IDE中,比如codeblocks,按住ctrl,然后滑动鼠标滚轮就可以实现字体的放大缩小. 在强大的vim中code怎么能缺少这种功能?! 在vim插件库中查询一番,发现 ...
- vim+makefile入门编辑,编译,差错实例
vim+makefile入门编辑,编译,差错实例 vim makefile 编译 编写代码,一般在vim中编辑完后,输入:wq,在命令行下输入g++ hello.cc -o hello ,出现问题,打 ...
- bat脚本:Java一键编译(Javac java)
bat脚本:Java一键编译(Javac java) D: 是指D盘 javat是要编译的.java文件所在的文件夹 也就是D:\javat bat代码: :start COLOR 0A cls ...
- 如何使用Jetbrains Clion 在一个工程里 编译单个C++源文件 (实现一键编译且运行)
这篇文章主要在下面这篇文章的基础上,先是实现了一键编译和一键运行两个单个功能,最后又进一步使用Clion自带的Custom Build Application实现编译且运行一键实现. https:// ...
- [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件
在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么 ...
- Vim技能修炼教程(17) - 编译自己的Vim
编译自己的Vim 前面我们已经对Vim有比较丰富的了解了.我们也知道Vim有很多编译时的选项,很多功能依赖于这些编译选项.其中最重要的就是脚本语言的支持,很多发行版本是不全的.为了支持我们所需要的功能 ...
随机推荐
- 【题解】警位安排( 树形 DP)
[题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...
- 【转】HTML5游戏开发经典视频教程、电子书汇总
HTML5游戏开发经典视频教程.电子书汇总 HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某 ...
- cocos2d&cocos2dx学习资源
汇总一下自己学习Cocos2d和cocos2dx认为比較好的一些资源: 书籍: <iPhone&iPad cocos2d游戏开发实战> Steffen Itterheim < ...
- [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 ...
- LINUX内核调度器+linux 内存
http://www.cnblogs.com/tolimit/p/4303052.html
- SQLLite 简介
[1] SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内 ...
- 利用Java API通过路径过滤上传多文件至HDFS
在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...
- Eclipse 每行 80 字符限制的提示线
有时候希望eclipse和C++编辑器之类有条对齐线 打开 Eclipse, Windows -> Prefereces -> General -> Editors -> Te ...
- java中关于public class
在编写类的时候可以使用两种方式定义类: public class定义类: class定义类: 1,如果一个类声明的时候使用了public class进行了声明,则类名称必须与文件名称完 ...
- xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Deve
以上错误是因为安装了 xcode , 但并不是系统默认的位置, 所以可以使用以下命令把 xcode 的路径修改为你安装的位置即可 sudo xcode-select --switch /Applica ...