VIM大作战之C++简易集成编译环境(Windows篇)

一切都要从这篇文章说起
Vim 实在是精致独特得有点像个林妹妹。但谁要是希望家里也有个林妹妹,光把自家丫头照着绣像打扮打扮是不行的,必须从零开始养成一个。而且就算真能养出来个“天上掉下来”一般的可人儿,管家婆的位置仍然没她的份。
——《钗黛双收:若你也同Vim难割舍,却又看Emacs情切切》
那时候刚工作不久,有一次去一个搞嵌入式的同事工位上讨论一个bug,只见他操作一个界面简洁的文本编辑器,但是这个编译器似乎不简单,有文本高亮,有自动补全,还可以子窗口嵌套,更夸张的是,这个同事以打字的速度敲着键盘,伴随着的是界面、光标刷刷的跳。在我还没搞明白发生了什么的时候,这个同事突然停下来,指着屏幕,告诉我他搞清楚了bug原因……
这就是Vim给我的第一印象,赤裸裸的逼格。
废话不多讲,以下是我想跟大家分享的vim比较有意思的东西,也是抛砖引玉吧。
vim和gvim
这里推荐KM上一篇很好的介绍Vim的文章:
http://km.oa.com/group/16841/articles/show/199187
用linux的童鞋对VI或者VIM一点也不会陌生,因为这是标配。编辑代码,配置文件都得靠它。而在Windows下VIM确实显得有些非主流,因为选择比较多加上Vim奇葩的上手曲线。

Vim主要分两种,一个是在命令行或者控制台的vim,另外一个是带图形界面的gvim。这两者其实操作起来体验差不多,因为Vim下鼠标几乎无用……,不过Windows下gvim用起来还是舒服一些。


能做什么
一句话,就是把利用VC编译环境集成到Vim当中,这样可以在Vim中编辑,修改,运行一个简单的cpp程序。直接上图吧。

最大的好处就是轻量级,比起VS来讲,轻便快捷得多。特别是在写一段测试代码,或者试用一个不熟悉的API的时候。
不知道有多少同学跟我干过跟我一样的事情:
- 先gvim main.cpp,写好,保存;
- 打开VS的命令提示控制台;
- cl.exe main.cpp;
- 运行exe;
- 如果编译,或者运行有问题,打开main.cpp,以上步骤重新来一遍。
现在这只是过去式了,F5,编译运行一键搞定。如果编译错误,也会把错误信息打出来。
这里给大家提供一个思路,根据自己的需要,发挥自己的想象力,把一些日常工作集成到Vim,或者利用Vim来做,当然前提是能够提高效率(提高逼格也行
)。
PS:Vim有很强大的脚本,插件的支持,足够你折腾。
插件安装
安装gvim
Vim的最新版本可以在Vim官网上下载;
下载CPPBuild.zip(附件)
1) 解压缩CPPBuild.zip到本地
2) 修改vim的配置文件_vimrc,添加filetype plugin indent on,作用是打开vim插件功能。_vimrc的路径:[gvim安装目录]\_vimrc

3) 拷贝CPPBuild.vim到[gvim安装目录]\ vimfiles\plugin\
4) 根据当前系统,修改CPPBuild.vim,两个地方需要修改,一个是工作目录,另外一个是VC和Windows SDK的路径

5) 将剩下的文件拷贝到步骤4中设置的工作目录当中

6) 关闭所有gvim,重新打开任意一个新的gvim(目的是让CPPBuild.vim的修改生效),快捷键[Ctrl-K][Ctrl-P],此时gvim会打开一个新的标签页

7) 在步骤6打开的标签页下,快捷键[Ctrl-K][Ctrl-I]打开预编译头文件(可以根据自己需要修改),快捷键[F5],编译预编译头文件和CPPBuild.exe

8) 回到步骤6打开的标签页,[F5]编译运行,打完收工。

注:步骤7其实就是编译一次预编译头文件,这样做可以提高以后的编译效率。只需要做一次,以后可以跳过这个步骤。
CPPBuild
Vim插件CPPBuild的组成:
l CPPBuild.vim:插件脚本,负责在Vim中绑定快捷键,实现CPP编译的主要逻辑;
l CPPBuild.cpp:会被编译成CPPBuild.exe,实现无窗口的情况下调用cl.exe,编译cpp文件(直接调用会弹出一个控制台黑框);
l vim_pch.h:预编译头文件,负责生成.pch文件;
l vim_pch.cpp:预编译cpp文件;
l template.cpp:模板cpp文件,包含main入口函数,拷贝这个文件的内容来生成临时的main.cpp;
CPPBuild的工作流程图如下:

代码下载:http://pan.baidu.com/s/1sj7BXd7
VIM大作战之C++简易集成编译环境(Windows篇)的更多相关文章
- Jmeter+jenkins如何快速搭建接口和性能测试持续集成解决方案-[基于windows篇]
最近在用Jmeter本来想写一个详细的使用教程,突然看到有前辈已经写好了不错的教程,特此"借花献佛"整理出来分享给大家! Jenkins + Jmeter 构建接口.性能测试持续集 ...
- Jenkins集成appium自动化测试(Windows篇)
一,引入问题 自动化测试脚本绝大部分用于回归测试,这就需要制定执行策略,如每天.代码更新后.项目上线前定时执行,才能达到最好的效果,这时就需要进行Jenkins集成. 不像web UI自动化测试可以使 ...
- Android破解学习之路(十四)——【Unity3D】王牌大作战破解
一.前言 今天带来的是王牌大作战的破解教程,游戏下载的话,我是直接去TapTap官网下载的 支付宝内购破解用老套了,今天学点破解的新花样吧!! 二.支付宝内购破解 支付宝的内购破解已经很熟悉了, 直接 ...
- Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading
Expo大作战系列完结! 简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与 ...
- Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(四)--快速用expo构建一个app,expo中的关键术语
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
随机推荐
- Java基础知识强化之集合框架笔记42:Set集合之LinkedHashSet的概述和使用
1. LinkedHashSet类的概述: • 元素有序唯一 • 由链表保证元素有序 • 由哈希表保证元素唯一 2. 代码示例: package cn.itcast_04; import java.u ...
- Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题
该问题有两种方法: 一 利用两个数组,此法简单,不讨论 二 利用一个数组,从第0个开始依次取元素,并在其后元素中查找是否有该元素,有则删掉后面的重复元素,依次遍历.---但是这种情况要特别注意,当后续 ...
- Writing Your First Test
Let's say you have an activity layout that represents a welcome screen: <?xml version="1.0&q ...
- MySQL存储过程学习笔记
MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...
- 阿里大于验证码发送 (ThinkPhp框架)
1.登录平台 阿里大于2.登陆之后我们可以看到资费,使用场景等,在进入正题之前我们需要一些准备工作,首先我们先了解下短信的请求参数,在这里我们需要注意的是sms_param这个参数,在接下来我们申请短 ...
- C# 内存管理优化畅想(三)---- 其他方法&结语
前两篇文章提出的优化方法,都是不需要修改源代码的,而是在CLR或JIT层面进行自动优化的.但本文中提出的优化方法则需要引入新的语法,开发者只有在源代码中使用了这些新语法,才会获得优化. 1. 允许对象 ...
- Fileupload控件导致500错误
问题: 今天遇到一个问题,用Fileupload控件上传Excel文件,用一个button控件调用“FileUpload1.SaveAs”方法,点击按钮后出现服务器500错误.如下图: 解决方法: 在 ...
- 表达式:使用API创建表达式树(5)
一.ConditionalExpression:表达式 生成如 IIF((a == b), "a和b相等", "a与b不相等") 式子. 使用: Paramet ...
- MySQL性能测试工具之mysqlslap使用详解
mysqlslap是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.msq ...
- 【转】 iOS KVO KVC
原文: http://www.cocoachina.com/industry/20140224/7866.html Key Value Coding Key Value Coding是cocoa的一个 ...