此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
现在的模糊匹配是倚靠vsc的匹配机制吧?比如输入 nh 匹配到 你好
。
感觉这个方向会在某种程度上代替vsc的匹配机制和代码分析功能,空间的确很大。
也许先从几个实例开始作些需求用例分析?
关注下进展,实现一个内置输入法的想法很有意思,也确实能很大地增强体验,但是分析代码上下文结构带来的阻力是相当大的
进展: 我实现了字典树来查找字典, 以此封装了一个依赖本地字典的输入法, 效果:
看起来还不错, 也没有很慢, 这还没做优化, 可以限制结果返回数量, 还有很大优化空间.
可以先在字典方案
分支上体验一下.
个人感觉速度已够用,不大确定的是多出来的那些补全项对用户感官上有多大影响。
刚试了 这里 的“消耗气力”,发现如果先输入了“消耗”,继续输qili没有触发补全:
另外,如果已经输入过“消耗气力”,也许以后输入qili时,就可以把“气力”优先级上升,现在是这样:
这大概就和积累词库和调整优先级那两个issue相关了。
另外,如果输入“shifangf”(释放范围),因为匹配不到词补全弹窗会消失(不意外),但此时退格删除最后的f也不会再次触发弹窗。
进入输入法领域,感觉很多工作量会在细节上。个人也倾向步子跨小些,其实从自己需求出发就挺好,先做到最基本功能。
有几个要讨论的点.
首先先整理一下思路.
理想的工作模式是:
计算补全项 :: 用户输入字符 -> 上下文 -> Array<中文>
.排序算法 :: 中文 -> 中文 -> Bool
.插入文本
插入到光标位置.这个过程中有很多细节:
计算补全项
的数据来源包括很多部分:
vsc的api
表现不稳定:
B.
的时候, 可以从vsc的api中得到你好
这个补全项.B.n
的时候, 依然可以从vsc的api中得到你好
这个补全项, 因为在js中返回结果与输入无关.跨文件
的引用其他文件中的中文变量.A.py
和B.py
, B.py中有一个你好
的变量.B.
的时候, vsc的api提供了你好
这个补全项.B.n
的时候, vsc的api就不再提供这个补全项了, 因为py中返回结果和输入有关, 而n
和你好
没有交集.跨文件
的情况下中文变量补全体验不好.将中文列表作为补全项显示出来
的过程中, 原理是设置补全项的filterText
字段.
本次正在输入的字符
和filterText
的开头一致, 则这个补全项就会出现.本次正在输入的字符
是vsc决定的, 是实际本次输入的, 不会考虑前后文, 比如输入在已有的ni
字符后面输入h
的时候, 就会被算成h
, 对于英文, 就是每次都是输入的那个字符, 对于中文, 如果你用输入发直接输入你好
就会是你好
, 不会分解成'n''i''h''a''o', 只有当按空格或回车将中文实际打上去的时候才会触发这个过程.某个补全项是否要显示
的.sortText
属性, 这个属性会决定补全项的顺序, 当然, 前提是补全项已经通过了filterText
的检查, 不然就不会显示.insertText
属性, 这个属性决定补全项实际插入的结果.
中文
并不一定就是最终插入的东西.片段
, 例如可以提供一个加法片段
的补全项, 你可以输入jiafapianduan
来看到它, 但你选择后并不会插入加法片段
, 而是插入var add = a => b => a + b
.这其中需要决定一些问题:
ni
, 此时用户在这后面紧接着输入h
, 我们应该认为输入字符串是nih
还是h
?你
的后面输入h
ni
的后面输入好
get投入产出
的后面输入b
B.
的时候, 缓存vsc提供的项, 并且在输入到B.n
的时候加入计算.计算补全项
中的字典是否要用同一组字典?中文
一致吗?目前只想到这些问题, 也许在实现的过程中还会有其他问题.
我先按我个人的想法处理这些问题, 对于这些问题有什么想法可以在这里讨论.
谢谢告知。
首页说明变动很大。
本以为只会对修改或增加的功能进行说明。像snippet中文补全功能应该还有吧?
另外一些用语如“中文拼写”和“符号分词”感觉有待商榷。
建议渐进式修改,可以更清楚看出哪些功能有变动,也便于讨论。
snippet的功能并没有删, 文档漏写了, 我之后补上.
我主要修改的地方就是那些对某个语言的测试图片, 上面也说了.
我觉得演示不同语言的运行情况似乎意义不大, 我觉得有些偏离重点. (也许可以放在单独的文件里?)
删了后基本就没啥东西了.
主要是我觉得作为首页文档应该干净整洁有逻辑, 贴太多图片影响对整体的观感, 而且这些图还大小不一...
我觉得对不同语言的测试图片意义不大, 如果你觉得很重要的话, 我把它整理到单独的文件里, 然后在主页放个连接怎么样?
本来是想写拼音
的, 但想到还可能有五笔或其他输入中文的方法, 就用了中文拼写
, 有更好的建议吗?
一般我们说的分词是比较智能的分词, 比如你好世界
会分成你好
和世界
, 但现在我们的分词实现不是这样, 只是简单通过标点符号做分词标记, 比如类型包含: 字符串, 数字, 布尔
这样, 才会分出来字符串``数字``布尔
这些词, 所以我用了符号分词
这个说法, 有更好的建议吗?
snippet的功能并没有删, 文档漏写了, 我之后补上.
好,谢谢。
我觉得对不同语言的测试图片意义不大, 如果你觉得很重要的话, 我把它整理到单独的文件里, 然后在主页放个连接怎么样?
当时是想作为演示之用,现在看来效果有限。按你所说处理吧,也可作为 文档/功能简述.md
的补充。
关于用语,是否可以从更单纯功能的角度描述?当前的功能已相当于支持拼音等各种模式的内置输入法。相对于普通输入法,长处在于根据代码上下文决定排序。感觉类似这种介绍更简明且易于理解。
至于分词的细节,个人感觉属于内部细节,可以放在 功能简述.md
中,不一定要放在首页。
好的, 改成"可以在配置中调整"怎样?
字典有两个, 一个是"拼写字典", 一个是"本地输入法字典".
拼写字典是决定"如何把中文翻译成拼写"的, 输入法字典是提供"输入法词组"的.
中文
, 然后将这些中文转换成拼写, 如果转换出来的拼写和用户实际输入的字母有重叠, vscode就会显示这个补全项, 这个转换的过程使用的是"拼写字典".总的来说, "拼写字典"是核心的, 决定着我们用拼音还是五笔还是什么输入方法来输入中文.
而"本地输入法"只是一个扩展功能, "本地输入法字典"只是为这个功能提供词组.
对于"拼写字典"而言, 比如同时开启了拼音和五笔, 那么就既可以输入拼音, 又可以输入五笔, 都可以得到正确的结果.
对于"输入法字典"而言, 同时提供多个字典, 意味着同时有多个词组的来源, 比如如果同时提供的简体拼音和繁体拼音, 那么本地输入法里就即有简体又有繁体.
我这里的导入操作并不复杂, 只要提供字典的路径即可.
3 我预想的默认配置是使用简体全拼, 就是字典方案
分支现在的样子. 这应该和当前商店的版本体验区别不大.
另外会提供几个其他的字典, 例如各种双拼, 五笔之类的, 用户如果要使用这些, 则需要自己去vscode的配置中配置一下, 方法是:
可以在配置中调整
嗯好些。
则需要自己去vscode的配置中配置一下
之前那样的下拉选择感觉更友好些。
感觉一些使用上的细节还有改进空间,比如:
发布版的是这样:
要不以你的使用感受为准,在可以接受的范围内就可以发布,以后根据进一步使用和用户反馈慢慢打磨。
另一种比较稳妥的方式是提供新旧两种模式,用户在新版本有使用问题时可以选择切回老模式。不过这样维护成本比较高。
码表.取码(字, 版本)
里的 版本 应该就是 98/86。另见 此测试:
it('86牺', function() {
assert.equal(演示.取码("牺", 86), "trsg");
});
it('98牺', function() {
assert.equal(演示.取码("牺"), "csg");
});
你我都不用五笔的情况下,个人建议改版的第一步迈小些,比如先做拼音字典。
差不多搞完啦, 这几天我再做一些测试就发布!🎉
1.5.0版本已发布!
登录 后才可以发表评论