分页: 1 / 1

怎么让vim提示保存在编译之前?

发表于 : 2011-12-20 17:27
ufo22940268
我用

代码: 全选

:make
来进行编译。但是每次输入这个命令的时候总是害怕自己代码没有保存,所以有什么办法让vim提示保存代码在我没有保存的情况下?如果没有办法做到,你们是怎么解决这个问题的呢?

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-20 18:18
sarrow
作一个wrapper。

一个nnoremap或者command 来调用这个wrapper函数。

我是noremap ;rm :call RunMake()<CR>
这样的。

然后RunMake()内部进行update(或者 wall看,你的需要了)。同时检测有没有叫MakeFile的文件存在。没有就创建。有的话,就直接
:make<CR>

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-20 18:57
lilydjwg
sarrow 写了: 然后RunMake()内部进行update(或者 wall看,你的需要了)。同时检测有没有叫MakeFile的文件存在。没有就创建。有的话,就直接
:make<CR>
没有 Makefile 也是可以 make 的哦。

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-20 19:18
sarrow
没有 Makefile 也是可以 make 的哦。
真神奇!应该把“Makefile”替换成love。

不过,没有Makefile文件,而使用make,需要提供目标,不然,make不知道你要make什么,
也许你的目标真的是“love”。

:em05 :em05

----------------------------------------------------------------------

我自己作了一个makefile文件的自动生成机制。你只需要提供makefile文件的名字——可以
是Makefile,也可以是xxx.mak。等等。

然后,你再选择一个模板,该脚本会自动进行替换——比如,以当前文件夹的名字,作为可
执行文件的名字——这一般就是最终的目标了,比如叫love。

而模板里面,第一个目标all就依赖于love:

all: love

然后:

love: $(OBJs)

....

使用的时候,单独的make就编译release版本;make debug就编译debug版本。

对我自己写的程序来说,make的接口都是一样的——虽然生成的目标可以不一样。

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-22 13:44
fanhe
你新建个文件,叫 love.c
然后写些代码

然后

代码: 全选

make love
就能生成名叫 love 的文件,我没开玩笑 :em09

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-22 13:46
fanhe
试试

代码: 全选

fan@fan-desktop:~/Desktop/VimLite/VIMClangCC$ cat > love.c << EOF
> #include <stdio.h>
> main(){printf("making love\n");}
> EOF
fan@fan-desktop:~/Desktop/VimLite/VIMClangCC$ make love
cc     love.c   -o love
fan@fan-desktop:~/Desktop/VimLite/VIMClangCC$ ./love 
making love
fan@fan-desktop:~/Desktop/VimLite/VIMClangCC$ 

Re: 怎么让vim提示保存在编译之前?

发表于 : 2011-12-25 0:01
xvii
从网上找的配置:

代码: 全选

"" compile {{{
" 编译和运行 c/cpp 程序,在 windows 下使用会报错,需要去掉 ./ 这两个字符。
if has("unix")
	" C
	map <C-F5> :call CompileRunGcc()<CR>
	func! CompileRunGcc()
		exec "w"
		exec "!gcc % -o %<"
		exec "! ./%<"
	endfunc
	" C++
	map <C-F6> :call CompileRunGpp()<CR>
	func! CompileRunGpp()
		exec "w"
		exec "!g++ % -o %<"
		exec "! ./%<"
	endfunc
endif
" }}}
要改一下,把gcc改成make,具体没实现过。