日期:2014-05-17  浏览次数:21120 次

Windows下vimerl的配置以及扩展

?

最近开始学习Erlang,一方面出于对其主要语言特征(高并发)的兴趣,另一方面,当前项目的压力测试希望用Tsunghttp://tsung.erlang-projects.org/,基于Erlang,很好的压力测试工具)来做,而当前Tsung的协议支持还不能满足我们的要求(XMPP over Websocket),所以希望对其进行扩展(下一篇会讲到Tsung的具体扩展实现)。当然,学习一门语言就需要一个简单方便的工具来进行一些简单的实验。一开始试用了下Erlidehttp://erlide.org/),但是配起来后,发现保存文件的时候有时候不会自动编译,然后运行一次程序会开一个新的Erlang交互进程,总觉得不太舒服,就放弃了。然后,对vim也挺有兴趣的,就开始配置使用vimerlhttps://github.com/jimenezrick/vimerl)。

?

为了方便,直接下了个Window版的vim,装好后安装vim-pathogen(方便管理vim插件的工具,https://github.com/tpope/vim-pathogen),按vim-pathogen的说明,在vimfilesWindows下)目录下新建了个bundle目录,然后git clone https://github.com/jimenezrick/vimerl。新建个简单的Erlang文件,修改,保存...

… Windows下的cmd窗口一闪而过,也不知道发生什么事情,也不太了解vim的插件工作机制,可一有点是好的,就是有vimerl的源代码,然后就开始苦逼的开始研究它的代码,经过各种调试(对一个从没接触vim脚本,也没写过Erlang程序的苦逼程序员来说,这个时间稍微有点长),最后问题定位在保存文件后,调用外部程序来编译Erlang文件的命令上,源代码如下(vimerl\compiler\erlang.vim):

[1]??? execute "setlocal makeprg=" . s:erlang_check_file . "\\ \%"

其中s:erlang_check_file=vimerl\compiler\erlang_check.erl,看了下这个文件的内容:调用Erlangcompile:file来编译一个Erlang源代码文件,并返回编译结果。上面那条命令的主要作用MS就是想调用Erlang的编译器来编译当前的文件,并把结果反馈回vim,但是没有成功。但是,在上条命令的上面有一条类似的命令:

[2]??? setlocal makeprg=escript\ -s\ %%代表当前文件)

先不管其它的,看看这个escript程序是干什么的,Google后了解到,这个程序提供的功能跟Linux下的bash一样,可以执行一个标记为Erlang Script(通过#!/usr/bin/env escript来实现,具体可查看vimerl\compiler\erlang_check.erl)的文件。那么命令[1]的目的就是想通过escript程序来执行erlang_check.erl来编译程序,但在Windows下调用没有成功(在Linux下,这个应该不会是问题),问题查明后,修改也就很简单了:

[3]??? execute "setlocal makeprg=" . "escript.exe\\ " . s:erlang_check_file . "\\ \%"

修改后,再保存,有编译错误时,可正确在vim的状态栏提示,OK

?

???????? 再看一下,发现vimerl还有自动补全的功能,输入Erlang模块名后(erlang:lists:的形式),按Ctrl+X+O后,会出现提出列表。不过这个功能需要先安装Erlangman文档,从官网下载后安装。再打开一个Erlang源文件,按下Ctrl+X+O…