VimL的"工程化"飞跃:从脚本到现代OOP
任何一个深度Vim用户,都对VimL怀有复杂的情感。
一方面,它是编辑器的"灵魂"——极致高效、与编辑器无缝融合,几行代码就能实现复杂的文本操作。另一方面,当你想写的不是一个"插件",而是一个"大型应用"时,VimL的局限性就暴露无遗。
VimL是一个顶级的"脚本小子",却不是一个合格的"系统架构师"。但最近,一个名为ObjectSense的项目正在试图改变这一切。

一、VimL的"天花板"在哪里?
"伪"面向对象
VimL 8 引入了 dict 函数,可以通过 self 关键字模拟OOP——但本质上,这不过是"字典驱动",而非真正的类(Class-based)结构。
说白了,你需要手动管理字典和函数引用来"拼凑"出一个对象:
viml
function! s:Person.getName() dict
return self.name
endfunction
let g:Person = { 'name': 'VimL', 'getName': function('s:Person.getName') }
这能跑,但写起来累、维护起来更累。
工程化缺失
VimL没有原生的 Package(包)或 Import(导入)机制。所有插件的函数理论上都在一个"大通铺"里,只能靠命名规范(如 unite#...)来避免冲突。
这在大型项目中简直是噩梦——依赖混乱、命名空间极易污染。
语言"孤岛"
VimL几乎完全被困在Vim编辑器内部,无法作为一门独立的语言去构建其他类型的应用,比如后端服务、桌面GUI等。

二、ObjectSense的第一步:保留内核,重构"骨架"
面对VimL的局限,ObjectSense的进化选择不是推倒重来,而是"基因重组"。
根据其文档,它首先保留了VimL的"优良基因"——核心代码仅在千行之内,高度精炼、简洁。这意味着它继承了VimL轻量、高效的运行时特性。
然后,它注入了完整的现代OOP骨架。
从"字典戏法"到"真正的类"
ObjectSense提供了清晰的 Class 关键字,以及 Inherits 来实现多重继承。
对比一下:
VimL(模拟):
viml
function! s:Person.getName() dict
return self.name
endfunction
let g:Person = { 'name': 'VimL', 'getName': function('s:Person.getName') }
ObjectSense(原生):
viml
Package oop
Class Human
function! s:Work()
return "Go to work"
endfun
End
Class Index Inherits Human, Car
" ...
End
代码清晰度提升了不止一个档次,而且继承这种现代OOP的核心能力,现在成了语言的一等公民。
引入 Package 与 Import
这是VimL在大型项目中最大的痛点——命名空间污染和依赖管理。
ObjectSense引入了现代语言标配的 Package 和 Import 机制:
viml
Package example
Import example.Door
Class Index
function! s:Main()
let door = CreateInstance("Door", #{})
echo door.color()
endfun
End
从此,你不需要靠命名规范来"手动防撞"了——语言层面帮你搞定。

三、进化不止于语言
OOP和包管理只是第一步。ObjectSense的野心远不止于此。
语言级别的模块化
传统的Vim插件用 vim-plug 或 Packer 这类编辑器级包管理器。ObjectSense则提供了语言级别的模块化方案:
• Sense.ose:类似 package.json 或 Cargo.toml,定义模块版本、依赖、导出和入口
• rose CLI:类似 npm 或 cargo,提供 install、push、run、create 等完整命令
这意味着:你写的代码不再是"Vim插件",而是可独立分发的软件模块。
Harmony框架:编译到任何地方
这可能是ObjectSense最大胆的一步——它不再满足于"封装"VimL,而是要通过 Harmony Framework 来"编译"VimL。
Harmony是一个"编译调度"框架,允许你注册和使用不同的编译器。这意味着什么?
• AOT编译:将ObjectSense代码直接编译为C语言代码
• 智能合约:将代码"翻译"为Solidity源程序,进而编译成EVM字节码
• 交叉编译:生成Windows、macOS、Linux多平台动态库或可执行文件
VimL从此不再是Vim编辑器的"寄生脚本"——它进化成了一种元语言:用Vim的简洁语法编写,但最终可以"变身"为C代码、Solidity合约或任何其他目标代码。
Micro:元编程的未来
如果说Harmony是"进化"的执行者,那么 Micro(微语言) 就是"进化"的设计者。
Micro机制("类似于Lisp宏")允许开发者自定义语法。这意味着你可以在语言之上设计语言——比如为智能合约或GUI设计一套专用的声明式语法,然后通过Harmony框架将其编译成目标代码。
VimL的基因完成了一次蜕变:从一个被动的、用于配置编辑器的脚本,进化成了一个主动的、用于创造新工具和新语法的元编程平台。

结语
回头看ObjectSense的进化路径,清晰而大胆:
• 第一次飞跃(语言):引入OOP和包管理,解决了VimL的"工程化"难题
• 第二次飞跃(生态):引入rose工具链,摆脱了"插件"的定位
• 第三次飞跃(跨平台):引入Harmony编译框架,彻底摆脱了对"Vim宿主"的依赖
它保留了VimL"千行代码"的简洁内核,却赋予了它现代工程化的"骨架"和跨平台的"翅膀"。
这门语言是真的能改写Vim生态的格局,还是只是一次大胆的"技术狂想"?时间会给出答案。
但至少,它让我们看到了一个可能性:那些被时代"遗忘"的脚本语言,也许只是还没遇到对的进化方式。
浙公网安备 33010602011771号