4

每当通过 go-mode 加载 .go 文件时,我都会尝试启用自动完成模式。如果我为 Go 源文件手动调用自动完成模式,它会起作用,但是当我尝试将其添加到 .emacs 时,它不起作用:

(add-hook 'go-mode-hook auto-complete-mode)

我已经尝试了一些变体,但似乎都没有。以下是我的 .emacs 中当前的 Go-Mode 片段:

;; Load Go Mode
(require 'go-mode-load)
(add-hook 'go-mode-hook 'auto-complete-mode)

我尝试像这样创建自己的钩子函数:

;; Load Go Mode
(require 'go-mode-load)
(defun auto-complete-for-go ()
  (auto-complete-mode 1))
(add-hook 'go-mode-hook 'auto-complete-for-go)

go-mode-load.el我还尝试在and中包含钩子go-mode.el,以及auto-complete-mode像这样调用:

(auto-complete-mode t)
(provide 'go-mode)

无论如何都行不通。我还添加了go-mode-hooktoauto-complete-default函数,如下所示:

(defun ac-config-default ()
  (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))
  (add-hook 'go-mode-hook 'ac-common-setup)
  ;; Other hooks
  (global-auto-complete-mode t))

那也行不通。在为缓冲区启用主要模式之后触发命令的最佳方法是什么?

4

2 回答 2

5

这是目前的解决方法:

(add-to-list 'ac-modes 'go-mode)

我通过以下提交修复了 v1.4 分支中的问题。

于 2012-09-06T07:06:05.940 回答
3

您尝试过哪些变体?如果您在前面添加单引号,它应该可以工作auto-complete-mode

(add-hook 'go-mode-hook 'auto-complete-mode)

没有这个引号,auto-complete-mode被解释为一个变量,并且该变量的值被添加到go-mode-hook. 为了使这个有意义,这样的变量应该包含一个函数引用作为它的值。尽管没有变量命名auto-complete-mode,但很可能 Emacs 会抱怨。

通过添加引号,您告诉 Emacs 这不是一个变量,而是您希望钩子调用的实际函数。另请参阅此处此处

于 2012-09-05T13:55:00.690 回答