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个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
随机推荐
- 利用 SysRq 键排除和诊断系统故障
说白了,SysRq手动触发而不用命令, /proc/sysrq-trigger 这个是通过命令接口 实验:LINUX窗口下 ,CTRL+ALT+F1,切换到TTY1,在文本模式下,按下 ALT+Sys ...
- 利用systemtap学习Linux路由代码
http://bbs.chinaunix.net/thread-4090162-1-1.html 一.为什么要这样做读kernel route子系统代码,当我弄懂了数据结构之间的关系以及控制流程后,心 ...
- VMware虚拟机中调整Linux分区大小——使用gparted
虚拟机分配了50G大小的空间,最近发现不够用,于是将扩展一下分区的大小,查了几种方法都不是很好,后来借助了gparted分区空间完成了,这个工具简单,方便,下面就简单的介绍一下.扩展分区主要要分为两步 ...
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
- JS(一)
额, 写了一堆, 待机win8崩溃, 重启之后只剩光秃秃的界面, 以后再填吧, 下次一定要一口气把博客写完,中间不能放下干其他事. 1.对象,以及对象与方法联合: var bob = new Obje ...
- CSS3伪类nth-child结合transiton动画实现文字若影若现
css3伪类nth-child结合transiton动画实现文字若影若现收先创建一个div盒子,然后包裹在div中的有10个span标签每个span标签填上内容一次为A,B,C,D,E,F,G,H,I ...
- iOS开动画效果之──实现 pushViewController 默认动画效果
在开发中,视图切换会常常遇到,有时我们不是基于导航控制器的切换,但实际开发中,有时需要做成push效果,下面将如何实现push和pop 默认动画效果代码实例: 一.push默认动画效果 CATrans ...
- OC - 29.自定义布局实现瀑布流
概述 瀑布流是电商应用展示商品通常采用的一种方式,如图示例 瀑布流的实现方式,通常有以下几种 通过UITableView实现(不常用) 通过UIScrollView实现(工作量较大) 通过UIColl ...
- iOS 数据持久性存储-对象归档
对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...
- linux 获取cpu百分比
vmstat 1 |head -n 4 |tail -n 1 |awk '{print $13}'