做点贡献:VIM如何在Windows下使用MSVC编译器

Vim、Emacs配置和使用
回复
fy0
帖子: 190
注册时间: 2011-06-27 0:57

做点贡献:VIM如何在Windows下使用MSVC编译器

#1

帖子 fy0 » 2012-01-26 23:24

前言

好了,做了不短时间的伸手党了。
自从数个月前喜欢上VIM,历经多次WIN和LINUX之间的来回折腾,
虽然蛋痛无比,楼主还是随身带着那一份VIM配置,让那酷酷的desert主题闪耀在楼主接触过的每一个屏幕。

平时倒还好,自己机子上常跑的是linux,各种工具强大无比:gcc、make、gdb、valgrind,
楼主插件齐备,武装齐全,意气风发,一口气写50行,不费劲!

但是假期了,楼主回到家,机子上跑的是Win7系统。
假期也就20天,何况硬盘已经塞满,不好另起炉灶。于是本着不折腾的原则开始折腾VIM……

文章中出现的VIM均指gVim

准备工作

你需要:一个VC++编译器
评 价:废话

好吧,话虽然废,但是你得知道这东西在哪。

如果你有VS(前提是装了VC++部分),找到你的VC++安装路径,比如:
D:\programs\VC2008 Professional Edition
再加点东西:
D:\programs\VC2008 Professional Edition\VC
嗯,就是这里。

如果你没有VS,请百度:VC2008编译器
这里给个来自我的115盘的下载链接:http://115.com/file/e6a87i3x

记着这个编译器目录,我们后面有用。

基础篇

首先跑到你的VIM安装目录(目录下可以见到gvim.exe),
写这样一个文本文件并命名为vc_cl.cmd 【因为vim本身有个:cl !】:

代码: 全选

@set MYPATH=编译器目录
@set PATH=%MYPATH%\bin;%MYPATH%\..\Common7\IDE
@set INCLUDE=%MYPATH%\include;%MYPATH%\PlatformSDK\Include;%MYPATH%\atlmfc\include;%MYPATH%\DirectX_SDK\Include;
@set LIB=%MYPATH%\lib;%MYPATH%\PlatformSDK\Lib;%MYPATH%\atlmfc\lib;%MYPATH%\DirectX_SDK\Lib\x86;
cl %1
之后打开编辑vimrc(gvim:编辑->启动设定)

加这么几句:

代码: 全选

autocmd FileType c map <F9> : call VCCompiler()<CR>

func! VCCompiler()
    exec "w"
    exec "!vc_cl %"
endfunc
在这之后你就可以通过F9来调用VC编译当前文件啦。

进阶篇

Windows下使用vim存在着不少问题,
其中quickfix窗口不能好好用是最让楼主蛋疼的。

如果在linux下,我们输入

代码: 全选

:!gcc %
会看到编译结果很完美的出现在了quickfix窗口,
在Windwows中却弹出个难看的框框(如果谁知道怎么解决请务必告诉我)。

用上面的方法进行编译还有一个问题,
就是当你编译一个工程的时候,只能跑去试图编译那个有着main()的文件。

此外,cl是不认头文件的,不能像gcc一样单编译个头文件。

基于以上问题,我们需要更加强力的解决之道:Makefile

一个简单的Makefile是非常好些的,这里不做深入探讨。
只给出一个非常简单的例子:

目录结构
Project
- bin
- src [Makefile在这里]
- obj

代码: 全选

bin = "../bin/program.exe"
obj  = "../obj"

objects = $(obj)/main.obj

$(bin) : $(objects)
	$(CC) -o $(bin) $(objects)

$(obj)/main.obj : main.c
	cd ../obj
	$(CC) -c ../src/main.c
MSVC提供的make工具名为nmake,
所以与刚才类似的(我称之为batch-link大法),在Vim目录下创建nmake.cmd

代码: 全选

@set MYPATH=编译器目录
@set PATH=%MYPATH%\bin;%MYPATH%\..\Common7\IDE
@set INCLUDE=%MYPATH%\include;%MYPATH%\PlatformSDK\Include;%MYPATH%\atlmfc\include;%MYPATH%\DirectX_SDK\Include;
@set LIB=%MYPATH%\lib;%MYPATH%\PlatformSDK\Lib;%MYPATH%\atlmfc\lib;%MYPATH%\DirectX_SDK\Lib\x86;
nmake %1
之后跑到VIM里面编辑vimrc,加入:

代码: 全选

autocmd FileType c map <F9> : call VCMake()<CR>

func! VCMake()
    exec "w"
    compiler msvc
    exec "make"
endfunc
从此以后F9就是make工程了。
渣排版见谅……我弄不到更好了……
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 做点贡献:VIM如何在Windows下使用MSVC编译器

#2

帖子 sarrow » 2012-01-26 23:37

那我算的上是同好了。

楼主是用U盘装配置么?

我是将vim、gnu-tool,mingw都放在移动硬盘里面。随便插上一台PC电脑,就能直接使用我常用的工具。

就是第三方的,速度快,且能很好管理数据库的客户端,还没有找到。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 做点贡献:VIM如何在Windows下使用MSVC编译器

#3

帖子 fanhe » 2012-01-31 14:29

我的基于 vim 的 IDE 支持 msvc 编译器的,但是 pyclewn 只支持 gdb 调试器,编译了没法调试,不爽
还是习惯上全套 gnu 的工具链的
onemoo
帖子: 70
注册时间: 2010-10-12 23:52

Re: 做点贡献:VIM如何在Windows下使用MSVC编译器

#4

帖子 onemoo » 2012-02-12 0:44

非常感谢!

话说,因为嫌麻烦我都放弃这样鼓捣了。
我现在是:
如果需要跨平台,那么就用CMake。Linux下用GNU的工具,Windows下就老老实实地用VCxx Express编译。
反正我也是自己玩,不考虑那么多事。
Use Vim or Emacs? It's a problem!
回复