一个简单的 .Net Vim 引擎 LibNVim 开发记录 (三)
来源:互联网 发布:淘宝借款有哪些口子 编辑:程序博客网 时间:2024/05/15 23:51
几个问题:
Edition 对 Motion 类型的依赖通过接口来识别是否多此一举?
'f' 类的移动与 'j', 'w' 的移动是否需要区分开来?
状态机越来越复杂, 怎么维护?
尽量用 if { } else if { } else { } 结构, 提供清晰的逻辑划分, 当然, 层数多了, 阅读与查找会不方便, 需要权量一下(这个时候, LibNVim 体现了它的价值 ;)
项目改名
还是尊重人家的命名权, 把 "VsNVim" 改为了 "NVimVS", 避免与 "VsVim" 混淆
单词搜索的方案
目前先提供 '*', '#', 'n', 'N' 的搜索支持
1) 使用系统提供的方法
粗略看了下 VsVim 的代码, 搜索部分的代码有点乱, 没有能整理出与 VS 系统交互部分的代码.
试着直接使用 "Edit.Find" 方法, 但是可控性存在问题, 控制粒度不够, 反馈也不足, 于是考虑放弃, 打算自己实现一套.
但仍有点不甘心, 认为 VS 应该有提供搜索的调用接口, 于是 google 试了几个关键字, 无意中找到了 ITextSearchService 接口, 试着用了下, 顺利解决问题.
这个接口本不是这么难发现, 只是一开始思路受限, 总习惯通过 VsVim 学习与 VS 的交互, 遇到卡后, 就没有走下去, 而是尝试别的办法.
二来对 .Net Framework 的使用还不够熟悉, 经常碰到想要找一个类, 但不知从何找起.
就这个接口来说, 出现这样的错误有点不应该, 因为在 namespace 的限制下, 想要了解 VS 对外提供的服务还是很容易办到的.
2) 自己实现文本搜索
能利用已有的资源, 何必自己费力呢?
小结
预想的目标差不多达到了, 整个设计过程基本符合当初的设想, 虽然 VS 对键盘输入的处理机制有点出乎我的意料, 但还算在掌控中, 原始的设计思路没有什么大的问题, 后面会试着往其他 IDE 移植, 验证下引擎的移植性怎么样
最后附上功能状态列表, 欢迎感兴趣的同学试用 ;)
Implementation Status:
No plans for ":w", ":q", have no ideas on the need of Visual Mode
Modes supported: Normal, Insert
Motions supported: 'h', 'H', 'j', 'k', 'l', 'L', '0', '^', '$', 'G', 'w', 'W', 'e', 'E', 'b', 'B', '%', "gg", "zz", "[{", "]}"
Simple Editions supported: '.', 'u', 'U', 'x', 'X', 'i', 'I', 'a', 'A', 's', 'S', 'o', 'O', 'C', 'D', 'J'
Range Editions supported: 'cX', 'dX', '=X'
Copy & Paste supported: "yX", 'p', 'P'
Simple Search supported: 'f', 'F', 't', 'T', '*', '#', 'n', 'N', "/xxx"(a simple dialect, ignorecase default, and no regex)
- 一个简单的 .Net Vim 引擎 LibNVim 开发记录 (三)
- 一个简单的 .Net Vim 引擎 LibNVim 开发记录 (一)
- 一个简单的 .Net Vim 引擎 LibNVim 开发记录 (二)
- 新手开发asp.net模板引擎(1): 一个简单的模板
- 一个简单的变形引擎
- 一个简单的模板引擎
- 记录 -- 介绍“Razor”— ASP.NET的一个新视图引擎
- 一个简单的VIM配置
- 记录一些简单实用的vim用法
- ubuntu下vim的简单使用记录
- 一个比较全的vim指令记录
- VIM简单命令记录
- Asp.net 简单的站内搜索引擎
- 一个简单的站内搜索引擎的实现
- .net c# 一个简单但是功能强大动态模板引擎(一)
- 记录一个简单的问题
- 分享一个简单的python模板引擎
- V8 js引擎的一个简单介绍
- 牛X人
- 模型即软件,建模即开发——顶点软件LiveBOS灵动业务架构平台
- c++ 遍历一个目录下的所有文件
- C# 根据经度纬度计算两点的距离
- tcp/ip Incoming Connection Request Queue(呼入连接请求队列)
- 一个简单的 .Net Vim 引擎 LibNVim 开发记录 (三)
- android 利用VideoView播放视频文件
- javaCode解密系列---深入java类加载器1
- Matlab GUI 中多Axes下的鼠标动态跟踪[windowbuttonmotionfcn 函数]
- The day
- AT91SAM9260不能与sam-ba连接的解决方法
- 网络搜索引擎大全
- 书和耳机到了
- 数据结构基础(待完善)