使用 go-mode 自动完成

Posted

技术标签:

【中文标题】使用 go-mode 自动完成【英文标题】:Auto-complete with go-mode 【发布时间】:2012-09-05 10:05:08 【问题描述】:

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

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

我已经尝试了一些变体,但似乎都不起作用。以下是 Go-Mode sn-p 目前在我的 .emacs 中的样子:

;; 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.elgo-mode.el 中包含钩子,以及像这样调用auto-complete-mode

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

这两种方法都不起作用。我还将go-mode-hook 添加到auto-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))

这也不起作用。在为缓冲区启用主要模式后立即触发命令的最佳方式是什么?

【问题讨论】:

【参考方案1】:

这里是暂时的解决方法:

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

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

Add go-mode to ac-modes Add go-mode dictionary

【讨论】:

我在 github 中应用了您在我的源列表中链接到的更改并且它有效。非常感谢!【参考方案2】:

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

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

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

通过添加引号,你告诉 Emacs 这不是一个变量,而是你希望钩子调用的实际函数。另见here 和here。

【讨论】:

我也试过了。以下是 Go-Mode sn-p 在我的 .emacs 中的样子: ;;加载 Go 模式 (需要 'go-mode-load) (add-hook 'go-mode-hook 'auto-complete-mode) 我也尝试在 go-mode-load.el 和 go-mode.el 中包含钩子,以及像这样调用自动完成模式: (auto-complete-mode t) (provide 'go-mode) 两种方式都不起作用。在为缓冲区启用主要模式后立即触发命令的最佳方式是什么? 糟糕! cmets 中不支持格式设置,因此我将在上面的问题中放入相同的文本。

以上是关于使用 go-mode 自动完成的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium 填写自动完成输入框? (为啥自动输入不加载自动完成选项但手动输入呢?)

使用角形和镀铬禁用自动填充/自动完成

通过 CSS 禁用自动完成

如何创建自定义自动完成功能,如内置自动完成功能?

使用 JSONP 的 Jquery 移动自动完成

如何禁用 chrome / jquery 的自动完成和自动填充