一个简单的 .Net Vim 引擎 LibNVim 开发记录 (二)

本文记录了开发LibNVim引擎的过程,采用抽象的IVimHost接口来实现平台无关性。文章讨论了模块划分,重点在输入解析的策略,特别是插入模式下的文本重现和处理VS2010特定问题的方法,以确保未来更好的移植性。
摘要由CSDN通过智能技术生成

之前介绍了开发的起因, 目标, 下面将转入实际的设计过程.

 

初始架构

 

设计一个可移植的插件引擎, 有一个思路比较好:

预先定义一个抽象的目标环境(IVimHost), 这个环境中包含了一组行为明确的操作接口(即 API).

引擎通过访问这些接口与外界环境交互, 从而避免对某个具体环境的依赖.

 

LibNVim 的整体架构, 即是按照这个原则组织.

 

模块划分

 

程序目前有 2 个模块, 一个是 LibNVim 引擎(LibNVim), 另一个是引擎在 VS 2010 中的宿主(VsNVim, 很可耻的抄袭了一下 VsVim ;).

从道理上来讲, 设计一个跨平台系统, 在开始时就针对 2 个或更多平台同时开发比较好, 这样可以及早纠正设计中的错误, 保证设计的质量.

但是因为精力有限, 现在只能以自己常用的 VS 2010 作为目标模型.

因此必须在设计时必须小心, 尽量保证抽象的通用性, 而不要依赖某些 VS 特有的东西, 机制, 以免之后移植其他平台出现问题.

 

输入的解析

 

Vim 接收的键盘输入种类繁多, 规则也比较复杂.

所以, 把输入的解析独立出来, 交给状态机(VimKeyInputEvaluation)去处理, 是个不错的选择.

 

插入时输入的文本如何重现?

 

插入模式(ModeInsert)时的文本输入的重现, 即 '.', 如果要精确重现所有键盘动作, 不仅实现起来麻烦, 从概念模型上来说也很复杂: 比如光标跳转(如上下左右)导致编辑区域的变化, 区域内删除操作的记录, 区域边界处删除操作的处理...如此等等

 

没有必要做一个精确, 但是复杂, 难

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值