这是公司完成工作的方式(我正在简化一点,可以在的文档中找到更详细的描述company-backends
C-hvcompany-backends
RET。
您有一个后端(完成引擎)列表,公司应尝试在此时提供完成功能。Company依次尝试每个后端,第一个返回任何候选者的后端将用于完成操作,其余后端将被忽略。因此,默认情况下一次仅使用一个后端。
在您的情况下(您似乎处于emacs-lisp模式),emacs-lisp后端正在返回要完成的候选对象,因此company-dabbrev
公司永远不会使用它来完成任务,也永远不会foobarsentence
完成任务。因此,您可能想更改公司后端,使其company-dabbrev
早于company-elisp
(或company-capf
在最近的emacsen中)。但是我想那不是您想要的,因为那会扭转当前的状况,并且您将无法从emacs-lisp后端获得完成(在这种情况下请继续阅读)。
Company提供了一种使用grouped
后端来合并来自多个源的完成内容的方法。通常,的成员company-backends
是单独的后端,但是也可以是后端列表,在这种情况下,只要后端返回的内容相同prefix
或要完成的文本(请参阅参考资料中company-backends
的详细说明),这些后端的完成内容就会合并在一起。
因此,如果您要合并来自company-elisp
(使用最近的emacsen company-capf
的)补全,company-dabbrev
只需执行此操作
(add-to-list 'company-backends '(company-capf company-dabbrev))
另外,您可以使用:with
关键字合并不同的后端
(add-to-list 'company-backends '(company-capf :with company-dabbrev))
这与没有后端列表的示例不同,:with
因为公司将在:with
确定prefix
(要完成的文本)之前仅使用后端。这意味着,从后端候选人后:with
会被公司忽视,不论是否后端返回prefix
或没有,如果没有后台的前:with
回报prefix
。
您可能想在emacs-lisp缓冲区中本地设置(我更喜欢这样做)