應該是 fussy
的 completion-styles 出了問題. 我自己的配置是沒這問題的.
能分享下不用 fussy 和配置方法吗?我这边也试试看
这个包确实超级好用!
但是我遇到一个不太明白的地方:
我目前只使用了 company-dabbrev-code
后端,用来补全一些变量名。比如我想补全 PanelVariables
这个变量,我只有写 “pvar” 、 “pable” 等才会有这个补全(即,第一个字母必须得对上),如何才能实现 “variable” 前缀也能补全 PanelVariables
呢?
能解釋得更詳細點嗎?我使用是沒有這問題的. flx 字首比重比較重; 不過不會到不能補全的地步.
我用的是 company-fuzzy
这个包。
我的需求是:如下图,我开启了 company-dabbrev-code
这个后端,我希望匹配 doom-font
这个变量。我希望我输入 “fon”时,就能出现 doom-font
的匹配项,但实际上并不会(似乎首字符不匹配时,就已经不会出现在候选项里了),因此我必须使用“dfon”才能出现我想要的匹配(如下图)。
我发现我的需求其实有人提过issue:Ignores candidates that do not match prefix · Issue #38 · jcs-elpa/company-fuzzy · GitHub ,但似乎并没有解决。
目前我自己稍微 hack 了一下,已经达到我想要的效果了(如下图),目前还不知道会不会遇到某些 bug (比如某些后端不接受空的 key)或者性能问题,反正我先用着,感谢您的包,非常好用!
hack 代码如下:
(define-advice company-fuzzy--call-backend
(:override (backend command key) force-empty-key)
;; (ignore-errors (funcall backend command key))
(ignore-errors (funcall backend command "")))
其实就是强制使用空的前缀,来获得所有的候选项。
其实我还有一个疑问:为什么这张图片中,对于第一个候选项 doom-font
,“dfon”似乎匹配了很多字符(即绿色高亮的字符,下面我用 [ ]
指示):[d][o][o]m-[f][o][n]t
,为什么不是:[d]oom-[f][o][n]t
呢,前两个 o
的匹配是怎么来的呢?难道是乱序吗?
我对 flx 的匹配机制并不了解,有没有什么手册供我学习?
主要是因為效能還有設計上的問題. 效能是指第一個字母匹配時, 匹配數量太高. 往往第一個字母就會很卡 (我個人喜歡一開始就匹配的感覺). 設計的問題是指, 不是所有的 company backend 都有相同的規則. 所以並不適用所有的 backend. 當然是有其他解決方法, 不過我認為現在就足夠好用了.
這算是折衷方案, 因為 company-fuzzy
支持十幾種模糊匹配的演算法. 我沒有花足夠的時間對每個算法做高亮 (也不是所有算法都有提供 vertices), 所以就單純把所有匹配的字符高亮起來. 所以答案是亂序沒錯.
原来是这样
我自己也发现有点卡,尤其是 emacs-lisp-mode 下的 company-capf
的候选项太多了。
所以目前我就在某些条件下再打开,还挺好用的,这个包真的厉害!
(define-advice company-fuzzy--call-backend
(:override (backend command key) force-empty-key)
(if (member backend '(company-keywords company-dabbrev company-dabbrev-code))
(ignore-errors (funcall backend command ""))
(ignore-errors (funcall backend command key))))
明白了,所以总结起来:
匹配还是顺序匹配的:“dfon”匹配了 doom-font
的 [d]oom-[f][o][n]t
;
而高亮,是所有出现的字符都被高亮了,所以高亮了 doom-font
中所有的“d”、“f”、“o”、“n”。
感谢答疑!