2007年9月9日星期日

vim sqlplus binding

今天成功的沿用了 perl 的 regex 知识修改了 sqlplus.vim 的一些小问题,使它能支持 PL/SQL,觉得关于正则的学习还是有收获的。

首先是删掉了 AE_execLiteralQuery 这个主要功能的行合并功能,因为这样导致语法错误不能清晰的定位。
然后是引入了 PL/SQL 的结束符 / 替换了分号,使得 SQL 和 PL/SQL 都能正确的运行,不至于使 vim 进入空等。
发现里面原先有一些自动替换掉 select 的 into 子句的内容,这个对于 SQL 很有用,对于 PL/SQL 却会造成伤害,但是好在 into 使用的不多,就保留了原来的设计。
当然还设置了默认的用户名和密码,避免每次启动后的询问。

主要的逻辑记录是用 substitude 完成的,解释如下:

  let l:query = substitute( l:query, 'SQL>\s*', '', '' )
  删除 SQL> 和后继的空白

  let l:query = substitute( l:query, '$', "\n/\n", '' )
  在末尾添加 / 回车,也许用别的方法做更易读

  let l:query = substitute( l:query, '\(\_\s*/\)*\_\s*$', "\n/\n", '' )
  把末尾多个 / 合并成一个

发现正则的调试在 vim 里面可以说是比想象中来的方便,唯一要注意的是验证时候不是用 print 或者 prompt 等,而是 echom[sg]

没有评论: