LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: knifeflying

怎么配置vim,:make调用外部编译器

[复制链接]
发表于 2010-12-16 11:45:57 | 显示全部楼层
Post by knifeflying;2123155
说的是,可是我不打开quickfix怎么知道编译成功呢?


如果没有返回任何错误(没有发生任何跳转),就是编译成功。

如果编译有错误返回,即使你没有打开 quickfix,也能够自动定位到第一个错误点的。此时状态栏用红色标注着错误内容,你可以使用 :cn 和 :cp 来切换上一个或者下一个错误信息。

也就是说,quickfix 窗口绝大多数情况下是不需要的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-16 22:16:30 | 显示全部楼层
Post by poet;2123180
makeprg 就是用于编译的程序,写 Makefile 意味着你需要把 makeprg 设定为 make 而已。与别的没有太大不同。通常我都会用 Makefile,因为用它的好处是你不必停留在当前的文件中进行编译。例如,当前你允许正在编辑一个 .h 文件,如果不用 Makefile 的话,vim 是不知道该去编译谁的。而用 Makefile 的话,只要在当前目录就都可以正常编译。

究其原因是你没有理解 vim 的工作原理,如果你希望 make 之后自动打开 quickfix,设定一个触发器就可以了,很多人并不希望这一点,例如我。所以缺省的设定是不自动打开。

另外,编译器的输出必须能够被 vim 识别,gcc的出错信息可以被 vim 识别,你的编译器如果输出格式跟 vim 差不多的话,也可以被识别,如果不同的话,需要自定定制一下 errorformat。

谢谢您,确实是需要编写一个makefile,errorformat也要编写。这个编译器的输出vim根本认不出,即使有错误也不会自动定位。
有错误的时候仅会显示"shell 返回 2"(而且这个信息是在本窗口显示的),然后按任意键继续。应该是编译器的返回值罢了,我试着编写一下errorformat试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-17 09:06:00 | 显示全部楼层
昨晚自己编写了一个错误文件:aa,实验了一下

具体内容:
1:1.txt:error1
2:2.txt:error2
3:3.txt:error3
4:4.txt:error4

每一行具体含义就是
行号:文件名称:错误信息

自己又编写了1.txt, 2.txt, 3.txt, 4.txt,内容随便写。

在vim中设置errorformat:
  1. :set errorformat=%l:%f:%m
复制代码

这样在vim中运行:cfile aa,就会自动打开1.txt,并且把光标定位在第一行,同时在下面显示errror1,:cn会打开2.txt并且把光标定位在第二行,同时在下面显示error2……

cfile的作用大致是这样,现在我还不知道vim中:make指令之后都做了什么,她有没有错误输出文件,怎么打开quickfix窗口实现的定位,原理是什么。有人讲解一下吗,简单的稍微讲解一部分也可以。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表