自己的开源项目里有一需求是使用 KaTeX 实现数学公式输入,其中一个 Task 是 KaTeX 命令自动补全
技术上采用 Trie 数据结构,只是在实现上有点难度:
起初想法是把 KaTeX 所有命令( command )逐个加入 Trie 中,因为它是有限集,不过有 command 嵌套问题,也不是所有 command 都可以嵌套,结构比较复杂,放弃...
第二种思路是参考 overleaf 的做法:数据驱动实现,将最常用的 command 显示在 dropdown list,所有就有了第三种思路:
初始状态下,命令集为空,用户输入之后,如果 command 存在,在插入公式之后便将该 command 加入到 Trie 中,那么问题就是,是否需要一个数据库存储命令集,其实命令集并不需要共用,因为每个用户的专业和领域不同,用到的命令分布范围也有所不同,也就是 local 自动补全功能,如果存到某个变量中,似乎不可取,第二次打开页面变量会初始化,并不会记录上次关闭页面时的值
我一直以为最后一种思路是不可实现的,直到昨天在 emacs 里安装了 auto-complete 写 Agda,发现即使我在一个文件里清空了所有相关代码,再次输入时依然会有 dropdown list 提示,也就是在该文件里会有代码记忆,即使我关闭文件后又重新打开:
这个功能正是我想要的,比较好奇是怎么实现的,虽然我在用 emacs,但是看不懂 emacs-lisp 代码,另外,我的 emacs 里也没有安装 lsp-mode,所以也不会是 lsp 机制影响
发帖和有经验的 v 友交流一下
大概浏览了一下源码,auto-complete
使用 cache 机制将 Intelligent completion history
存放在 ~/.emacs.d/ac-comphist.dat
文件里,所以才能做到重新打开文件仍会有之前写过的代码的智能提示和补全功能
不管是 language server、syntax parser,还是有向图解法,对我难度都有点大了 感谢几位 v 友指点
1
zhuangzhuang1988 2020-08-10 21:45:07 +08:00
|
2
azh7138m 2020-08-10 22:38:54 +08:00 1
补全看过一点相关的处理文章
现实的例子,子毅老板的编辑器系列(老板结一下广告费 https://github.com/dt-fe/weekly/blob/v2/085.%E7%B2%BE%E8%AF%BB%E3%80%8A%E6%89%8B%E5%86%99%20SQL%20%E7%BC%96%E8%AF%91%E5%99%A8%20-%20%E6%99%BA%E8%83%BD%E6%8F%90%E7%A4%BA%E3%80%8B.md 可以看他之前的一系列的文章,都是在生产实战检验的东西 轻松愉快的理论例子,装配脑袋的系列 https://www.cnblogs.com/Ninputer/archive/2011/07/03/2096944.html 如何处理未完成 /存在错误的语法 |
3
YadongZhang OP |
4
xuanbg 2020-08-11 08:20:23 +08:00
有向图
|