想将company-mode的补全list按种类排序,比方说company-backends为(company-lsp company-dabbrev-code company-dabbrev)
的情况下,company-lsp的内容排序 > company-dabbrev-code排序 > company-dabbrev的排序。然后在有yasnippet的情况下,yasnippet的内容永远在最后。
求教解法~感觉得写个company-transformers函数,然而自己的elisp捉急~
1 个赞
我在doom-emacs裏用(set! :company-backend '(c-mode c++-mode objc-mode) 'company-lsp)
(ccls,昨天加了system include path inference)
打開c++-mode
buffer後默認company-backends
:(company-lsp company-dabbrev-code company-dabbrev)
當有多個backends時,company-mode會排序company-lsp返回的結果(不想要的,因爲language server返回的結果是根據相關度排序的)
我猜測需要在哪裏設置company-lsp
這個backend返回的結果已經是sorted
的,但不知道在哪裏弄
解決了,設法弄成:
(setq company-backends '(company-lsp (:separate company-capf company-dabbrev)))
這裏:separate
會防止不同backends的candidates被合併到一起(並排序)
暫時這樣:
(after! company
(setq company-minimum-prefix-length 2
company-quickhelp-delay nil
company-show-numbers t
company-backends '((:separate company-capf company-dabbrev))
company-global-modes '(not comint-mode erc-mode message-mode help-mode gud-mode)
))
然後在c-mode c+±mode objc-mode中:
https://github.com/maskray/Config/blob/master/home/.config/doom/modules/private/my-cc/config.el#L51
(def-package! ccls
:load-path "~/Dev/Emacs/emacs-ccls"
:init (add-hook! (c-mode c++-mode objc-mode) #'+ccls//enable)
:config
;; overlay is slow
;; Use https://github.com/emacs-mirror/emacs/commits/feature/noverlay
(setq ccls-sem-highlight-method 'font-lock)
(ccls-use-default-rainbow-sem-highlight)
(setq ccls-extra-init-params
'(:completion (:detailedLabel t)
:diagnostics (:frequencyMs 5000)
:index (:initialReparseForDependency :json-false)))
(with-eval-after-load 'projectile
(add-to-list 'projectile-globally-ignored-directories ".ccls-cache"))
(evil-set-initial-state 'ccls-tree-mode 'emacs)
(set! :company-backend '(c-mode c++-mode objc-mode) 'company-lsp)
)
separate过后其他的backends好像就没有用了。我用diminish-undo -> company-mode
查看company-backend的方法试了下。
比方说这种情况下
company-backends-rjsx-mode’s value is
(company-lsp
(:separate company-files company-capf))
company-files并不起效果。