我在Emacs中使用了自动完成功能和yasnippet,我对它们的设置感到困惑。我在.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)

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

所以我的问题是:如何使yasnippet成为自动填充的第一位候选人?在.emacs配置中是否缺少某些内容?

任何帮助表示赞赏。

最佳答案

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

您可以通过在ac-sources缓冲区中查看ac-sources(C-h v js-mode)的实际值来检查它,以查看是否已通过与您的自定义值进行比较对其进行了修改。

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

  • 停止使用ac-config-default并指定所有autocomplete设置
  • 建议错误的钩子(Hook)在运行后将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))
    

    关于macos - 关于emacs中的自动完成和yasnippet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9869178/

    10-10 13:18