如何将company-dabbrev添加到“公司完成”弹出窗口?


12

设定:

KAEL的GUI版本GNU Emacs 25.0.50.1(x86_64-w64-mingw32)of 2015-07-25

从EmacsW64编译。

,使用MELPA的最新版本

Windows 7 x64位。

情况:

例如,我输入缓冲区foobarsentence。

然后在其下开始新行,并输入fooba,我希望foobarsentence从“公司”弹出完成窗口中得到建议。但是没有foobarsentence

我从另一个答案中发现,我可以使用company-dabbrev来绑定,M-/。但是我不知道如何将建议“反馈” company-dabbrev到弹出窗口中。我做了一个截屏gif,以使我的问题更清楚。

在此处输入图片说明

如您所见,M-/致电company-dabbrev。但我希望在公司完成弹出窗口中看到建议的内容。令我惊讶的是这不是默认设置。

有什么建议可以将建议从“反馈” company-dabbrev到公司弹出窗口?


这是什么主要模式?
PythonNut

Answers:


25

这是公司完成工作的方式(我正在简化一点,可以在的文档中找到更详细的描述company-backends C-hvcompany-backendsRET

您有一个后端(完成引擎)列表,公司应尝试在此时提供完成功能。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缓冲区中本地设置(我更喜欢这样做)


@wasamasa感谢您的反馈,编辑了我提到的答案:with
Iqbal Ansari

主席先生,你值得我投票。我非常喜欢您的解释,并且了解到有关Company的知识。感谢那。
ReneFroger

很高兴我能帮助
伊克巴尔·安萨里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.