Emacs的company-mode自动补全无法工作

4

我几天前开始使用emacs,但是在设置company-mode时遇到了问题。我使用package-install安装了company-mode,并在我的.emacs文件中添加了以下内容:

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

然而,当我切换到 haskell-mode 或 racket-mode 时,company-mode 的自动补全没有弹出来,即使我在一个关键字上等待几秒钟。我可能安装了一些与 company-mode 冲突或干扰的东西吗? 此外,当我尝试手动调用 company-complete 时,它只会显示“未找到完成项”。
编辑:尝试使用 auto-complete 作为替代方案,但是当我按下 tab 时,代码自动完成无法工作,但是当我在一个单词上调用 auto-complete 时,它可以正常工作。
编辑2:已经让 auto-complete 正常工作。 https://i.imgur.com/Vn4f2GX.png 看起来 flyspell-mode 和 auto-complete 产生了冲突。但是,我还是无法让 company mode 正常工作。 非常感谢任何帮助。

1
由于您是通过 package.el 安装的,所以不需要 (require 'company)。此外,我认为没有必要使用 after-init-hook 而不是简单的 (global-company-mode 1)。当然,这对您的问题没有任何影响。如果您转到 *scratch* 并键入 (doli,您是否会看到 company 插入了一些补全(应该会)?如果是这样,那么问题可能只是因为没有支持 Haskell/Racket 补全。 - Stefan
这次我确实得到了完成。看起来是这样的 https://imgur.com/Hr4yNTV 这是它应该看起来的样子吗? - Chakravarthy Raghunandan
另外,我已经成功地让Haskell和Racket-mode支持自动完成,但是在使用自动完成模式时无法同时使用flyspell minor-mode。 有没有什么解决办法?我想使用flyspell-prog-mode来查找我的注释中是否有任何拼写错误。嗯,说实话我可以不用它,但我想使用它。 - Chakravarthy Raghunandan
尝试使用 ac-flyspell-workaround - jpkotta
我猜 Haskell/Racket 和 Company 的问题在于 Company 找不到任何完成的来源。理想情况下,完成的来源应该由主模式提供,这样它就可以作为标准的 completion-at-point <key>M-TAB</key> 完成以及 Company 和可能还有其他一些工具的可用性。如果没有,您可能会在某个地方找到一些提供完成源的 company-haskell 和/或 company-racket 包。我建议您向 haskell 模式和 racket 模式提交错误报告,要求它们添加适当的 completion-at-point-function - Stefan
我明白了。非常感谢这些信息。我查了一下,找到一个包可以为公司添加后端以便与Haskell一起使用。至于racket-mode,目前还没有支持company的(但是嘿,我可以在racket/haskell模式下都使用自动完成。)干杯。 - Chakravarthy Raghunandan
1个回答

2

我成功地让company-mode在Haskell中工作,而且没有遇到太多麻烦。 我只需要将公司的后端添加到我的.emacs文件中:

(add-to-list 'company-backends 'company-dabbrev-code) 
  (add-to-list 'company-backends 'company-yasnippet)
  (add-to-list 'company-backends 'company-files)

获取包intero,它为Haskell添加了company-mode支持。就像这样:-

(add-hook 'haskell-mode-hook 'company-mode)
(add-hook 'haskell-mode-hook 'intero-mode))

关于racket-mode,我在我的.emacs文件中添加了以下内容:
  (defun my-racket-mode-hook () 
    (set (make-local-variable 'company-backends)
         '((company-capf company-dabbrev-code)))
    (company-quickhelp-mode 0))
  (add-hook 'racket-mode-hook 'my-racket-mode-hook)
  (add-hook 'racket-mode-hook 'company-mode)
  (add-hook 'racket-repl-mode-hook 'my-racket-mode-hook)
  (add-hook 'racket-repl-mode-hook 'company-mode)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接