请问下company候选项可以去除重复吗?

比如同时开启了company-etags和company-dabbrev时,会出来两个相同的函数名在列表里,可以去除重复的,只显示一个吗?

在 transformer 中实现:

(defun company/remove-duplicate-cands (cnads)
  ;; TODO
  new-cands)

(add-to-list 'company-transformers #company/remove-duplicate-cands)

可以根据每个 candidate 的来源决定保留哪一个,例如:

来自 lsp:
#("foobar" 0 6 (lsp-completion-item #s(hash-table size 6...)))

来自 dabbrev:
#("foobar" 0 6 (company-backend company-dabbrev))
1 个赞

用你说的这个方式搞定了,完美。


(defun eye/company-remove-dups (candidates)
  (let ((newseq))
    (mapcar #'(lambda (c)
		(if (not (member c newseq))
		    (add-to-list 'newseq c)))
	    candidates)
    newseq))
		  
(add-to-list 'company-transformers #'eye/company-remove-dups)

简化版

(add-to-list 'company-transformers #'delete-dups)
3 个赞

有效果,看来不需要自己另外写

1 个赞