新版 emacs 这个 emacs-init-time 的精度一下子提高了很多啊

看到 lsp-ui 添加了 webkit 渲染文档的功能 https://github.com/emacs-lsp/lsp-ui/pull/221 就想体验一下,于是便编译了最新的 emacs 发现精度提高了好多啊

emacs-init-time

PS: 对了,新版 emacs 还添加了新的补全方式

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 个赞

https://lists.gnu.org/archive/html/emacs-diffs/2019-02/msg00190.html

严谨的说是显示更多的位数。

fuzzy completion!!! 美梦成真系列。估计自带的只能用在capf上,但愿company会跟进一下,全线上fuzzy 对于我这种只会用正式版的还要等一两年吧

仔细看了下,这个 completion-styles 好像是针对 minibuffer 的,而不是 in-buffer 补全。不知道将来会不会有改变。

是 in-buffer 的

嗯我试了下确实有效果。刚刚看到它是在 minibuffer.el 中定义的就想当然了。下面是是设置 (add-to-list 'completion-styles 'flex),并且用 counsel-company 筛选的效果:

Peek%202019-05-03%2023-19

可以看到有一个问题是选项上屏以后,之前敲的中间那部分并不会消失。感觉是 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 来筛,是最直接的做法了。只不过,感觉「获得全集」就挺困难。。。