不好的地方,其实也有许多。最大的不便就是没有代码提示,对于不熟悉的方法,必须要去查看Language Reference。还有个附带的不便就是必须自己手动导入包。不过这两个不便之处,又让我远离了Flash Builder中的哪些错误的代码提示(我被误导过好多次),以及让我更熟悉AS3的包结构。
今天说的不是这些,好了,进入正题把!
在Vim中,有许多为程序员着想的地方。比如碰到编译错误后会自动打开第一个出错的文件并跳转到出错行。改完这个错误后可以用 :cn
命令跳转到下一个出错处继续修改。这个特性降低了程序员在调试过程中对鼠标的依赖,提高了效率。
不过,在使用Vim+Ant+FlexSDK来编译AS的时候,虽然能够看到编译的出错信息,但是Vim会自动打开一个不存在的文件,无法使用上面的功能。
要了解出现这个问题原因,首先要知道Vim获取编译错误的原理。Vim通过分析编译器输出的错误信息文本,来得到自己能识别的出错信息,从而实现正确的跳转。但不同的编译器的输出信息千奇百怪,Vim默认的分析程序不能正确解析 Ant+mxmlc
编译器的输出信息,造成了无法正确跳转到错误文件。让我们看张图:
可以看出,Vim将错误文件路径前面的[mxmlc]前缀也当作了路径的一部分,然后打开这个不存在的文件,导致无法正常进行修改。
再看一张详细一点的错误信息:
那么,只要我们将错误信息的解析程序设置正确,就能正确解析这些信息了!
执行下面的代码,然后编译,如果有编译错误,就能正常的跳转到错误文件的对应位置:
1 | :set errorformat=%E\ \ \ \ [mxmlc]%f(%l):\ 列:\ %c\ %m |
需要注意一点的是,在ex模式或者在命令行模式中输入errorformat属性值的时候,必须对空格用反斜杠转义,否则Vim会不接受这些参数值。网上找的很多例子可能都忽略了这点。上面的例子中,已经进行了转义。
为什么例子中有个中文?因为编译器自动识别了我的语言,因此输出的错误信息是中文的,我也必须用中文来分析。如果编译器输出信息为英文,那么这里的 列
应为 col
。
由于使用了中文,如果将这段代码写在vimrc中的话,就必须进行编码转换:
1 | let &errorformat=iconv("%E\ \ \ \ [mxmlc]%f(%l):\ 列:\ %c\ %m", 'utf8', &enc) |
至于语法的详细含义和用法,这里写的很清楚::help errorformat