看到 lsp-ui 添加了 webkit 渲染文档的功能 https://github.com/emacs-lsp/lsp-ui/pull/221 就想体验一下,于是便编译了最新的 emacs 发现精度提高了好多啊
PS: 对了,新版 emacs 还添加了新的补全方式
committed 10:36AM - 14 Feb 19 UTC
New ‘flex’ completion style
An implementation of popular "flx/fuzzy/scatter" completion which
matches strings where the pattern appears as a subsequence. Put
simply, makes "foo" complete to both "barfoo" and "frodo". Add 'flex'
to 'completion-styles' or 'completion-category-overrides' to use it.
2 个赞
Chris
2019 年2 月 20 日 23:25
2
fuzzy completion!!! 美梦成真系列。估计自带的只能用在capf上,但愿company会跟进一下,全线上fuzzy 对于我这种只会用正式版的还要等一两年吧
仔细看了下,这个 completion-styles
好像是针对 minibuffer 的,而不是 in-buffer 补全。不知道将来会不会有改变。
嗯我试了下确实有效果。刚刚看到它是在 minibuffer.el
中定义的就想当然了。下面是是设置 (add-to-list 'completion-styles 'flex)
,并且用 counsel-company
筛选的效果:
可以看到有一个问题是选项上屏以后,之前敲的中间那部分并不会消失。感觉是 counsel-company
的锅。
Update: 俺提了 issue,现在问题已经修好了,用起来很爽。
这个和ivy--regex-fuzzy
比有什么区别呢?
在下尝试用自己的经验解释一下哈:这个是「模糊地给出备选」,ivy 那个是「模糊地在备选中筛选」。
比方说如果用 ivy--regex-fuzzy
来筛一个标准的 capf 给出的备选,你还是要先打 use
、结果里才会有 use-package
,因为「给出备选」这个事不是 ivy 负责的。
我打算用的方案是用 flex 补全风格 + ivy–regex-ignore-order。这样在筛选的时候我可以用完整的词,ivy 不会强行把它们拆开,同时顺序还无关,比较适合忘记一个长名字怎么写,但是记得其中一两个词的情况。
这个是俺的认识。其实唯一的需求就是,我打一个名字中间的部分,希望 company 能把我想要的备选给出来。不知道只靠 ivy 全家桶(不依赖类似 flex 风格这种机制)能不能做到这种效果呢?
是呀,但是如果你什么都不打,是给不出备选的吧;要想有备选,然后不用 flex 风格,你得打一个名字开头的部分。。。
我认为还是有办法的,只是性能有问题。只要知道全集,敲其中任何一部分就能列出备选。
是的,其实我只是想能「敲出中间的部分来补全」而已,并不需要模糊补全,如果能获得全集,再用 ivy 来筛,是最直接的做法了。只不过,感觉「获得全集」就挺困难。。。