使用公司模式完成文件名


11

我在init.el中使用以下命令启用了公司:

(require 'company)
(add-hook 'after-init-hook 'global-company-mode)

但是,尽管源中有一些提供程序,但网站没有提到它的支持,但我没有完成文件名。

我开始输入/ home / emmanuel ...,虽然我希望完成功能会开始提供选项,但什么也没发生?

另外,公司模式如何自动检测相对路径的完成,我想我读到了它的支持,但是我不确定如果没有开头的“ /”作为提示,它将如何检测到它?


1
您应该提到要通过公司模式自动完成的主要模式。或者,也许您正在迷你缓冲区中寻找文件名的完成?请明确说明。
辣椒粉

1
我是一个初学者。据我了解,我想在所有主要模式下使用它(lisp,纯文本,任何编程语言)。实际上,简单的关键字补全(提供缓冲区中其他地方使用的单词)似乎可以在Lisp编辑以及其他模式下工作。
Emmanuel Touzery 2014年

请注意,我稍后还将尝试为Haskell获得更强大的完成功能,但这仅适用于haskell模式,目前,我仍在尝试使该功能在所有模式下均可使用。
Emmanuel Touzery 2014年

Answers:


8

您必须运行company-files以完成文件。您可以为文件完成完成绑定其他映射

(define-key global-map (kbd "C-.") 'company-files)

还要确保您在公司后端中有公司文件(M-x> customize-group> company> company backends)


您不一定需要绑定密钥来完成文件名。我认为这里的关键是配置company-backends。例如,您可以将其放在company-files该列表的首位,或将其包括在组后端中。
glucas 2014年

我认为需要编写一些函数来触发company-files或配置一些东西。至少对我来说,即使它company-backends
Jesse

我怀疑是因为列表中还有其他后端?公司模式将使用第一个后​​端,表明它可以处理当前前缀。如果您company-filescompany-backends列表的开头插入,它将自动完成。当然,这可能并不是您真正想要的,只是指出文件后端只是另一个后端...
glucas 2014年

是的,我不知道。我是将vim用户迁移到emacs的系统,在vim中,在某些情况下我会自动触发文件完成,而在其他情况下会自动触发代码完成。我认为那将是理想的。
杰西2014年

您可以使用模式挂钩在不同模式下指定不同的后端列表。例如,在LISP模式下,你可能希望符号完成和shell脚本要添加的文件名补等
glucas

15

正如@Jesse已经指出的那样,您想要的是company-files后端。有几种不同的使用方式:

  1. 绑定密钥以company-files直接呼叫。

  2. 使用命令company-begin-backend。这会提示您使用后端,然后提供完成候选人。

  3. 使用company-other-backend通过后端的列表,旋转(见下项)。这可以用于触发完成,也可以在触发公司模式以切换到另一组完成候选后使用。您可能要在公司地图中分配键绑定,例如(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. 配置变量company-backends。公司模式遍历此列表,以便找到接受当前前缀(即,点之前的文本)的后端。列表中完全可能有一个接受当前前缀但不提供任何完成候选的后端,这时公司模式将不会自动完成任何事情。您可以自定义列表,以便以符合您需求的方式订购后端。

修改的几个例子company-backends

如果您只想完成文件名,则可以将其作为唯一的后端:

(setq company-backends '(company-files))

这似乎不太可能,因此最好先放置最常用的后端,然后再使用前面提到的选项之一切换后端或在需要其他名称时按名称调用一个。

您还可以配置一个“组”后端,该后端创建一组合并的完成候选人。试试这个,例如:

(setq company-backends '((company-capf company-dabbrev-code company-files)))

这指定了一个后端,该后端将来自其他三个后端的候选者合并在一起。它将为您提供点完成,dabbrev和文件系统的结果。

您可以使用模式挂钩为不同的主要模式指定一组不同的后端。例如:

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local company-backends '((company-files company-dabbrev)))))

(add-hook 'emacs-lisp-mode-hook
          (lambda ()
            (setq-local company-backends '((company-capf company-dabbrev-code)))))
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.