【问题标题】:About auto complete and yasnippet in emacs关于 emacs 中的自动完成和 yasnippet
【发布时间】:2012-04-09 18:46:56
【问题描述】:

我在 Emacs 中使用自动完成和 yasn-p,我对它们的设置感到困惑。我将以下代码放入我的.emacs

(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas/global-mode 1)
(global-set-key (kbd "C-i") 'yas/expand)
(setq yas/also-auto-indent-first-line t)

(add-to-list 'load-path "~/.emacs.d/plugins/autocomplete/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/plugins/autocomplete/ac-dict")
(ac-config-default)
(setq ac-use-menu-map t)
(define-key ac-menu-map "\C-n" 'ac-next)
(define-key ac-menu-map "\C-p" 'ac-previous)

(defun ac-js-mode()
(setq ac-sources '(ac-source-yasnippet
                 ac-source-symbols
                 ac-source-words-in-buffer
                 ac-source-words-in-same-mode-buffers
                 ac-source-files-in-current-dir
                 )))
(add-hook 'js-mode-hook 'ac-js-mode)

我正在尝试将 yasn-p 设置为自动完成弹出菜单中的第一个候选者。但是,如下例所示,这不适用于我当前的设置:当我输入单词 for 时,formatItem 位于第一位,for 位于第二位。 formatItem 只是当前缓冲区中的一个局部函数。

 for_____________
|formatItem      |
|for            a|
|for            s|
|force          s|
|foreachv       s|
 ----------------

所以我的问题是:我怎样才能让 yasn-p 成为自动完成的第一个候选人?我的.emacs 配置中是否缺少某些内容?

感谢任何帮助。

【问题讨论】:

  • 我不知道答案,但是自动完成有一个内置的学习系统,所以你选择一个候选人的次数越多,下次它就会越高。所以你可能只需要使用一段时间,所有你常用的sn-ps都会自动浮到顶部。

标签: macos emacs autocomplete yasnippet


【解决方案1】:

ac-config-default 安装挂钩以设置合理的默认 ac-sources 值。这些钩子(尤其是ac-common-setup)可能会干扰您的设置。

您可以通过查看js-mode 缓冲区中ac-sources (Ch vac-sources) 的实际值来检查它是否已通过与您的自定义值进行比较来进行修改.

如果是这种情况,我看到了两种解决方案:

  • 停止使用ac-config-default 并指定所有autocomplete 设置,
  • 建议故障挂钩在运行后将ac-source-yasnippet 放在ac-sources 的开头。假设 ac-common-setup 确实是麻烦制造者,这看起来像:
(defadvice ac-common-setup (after give-yasnippet-highest-priority activate)
  (setq ac-sources (delq 'ac-source-yasnippet ac-sources))
  (add-to-list 'ac-sources 'ac-source-yasnippet))

【讨论】:

  • 谢谢你的回答。就是你描述的情况。但是我并不清楚上面给出的方法2。你能告诉我更多关于它的事情吗?谢谢。
  • 嗨,在我把你的代码放在我的 .emacs 中之后,ac-sources 的实际值似乎正好在 js 文件中的 Ch v 输出的位置:它的值是 (ac-source-yasn- p ac-source-filename ac-source-symbols ac-source-words-in-buffer ac-source-words-in-same-mode-buffers ac-source-files-in-current-dir).Local in buffer set .js;但是当我输入“for”这个词时,弹出菜单仍然给出我在问题中给出的图表。我不知道。
猜你喜欢
  • 2013-03-24
  • 2015-08-07
  • 2013-03-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2011-05-04
  • 2012-06-29
  • 2010-10-14
相关资源
最近更新 更多