Об автозаполнении и ясниппете в emacs - PullRequest
8 голосов
/ 26 марта 2012

Я использую автозаполнение и yasnippet в Emacs и меня смущают их настройки. Я поместил следующий код в мой .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|
 ----------------

Итак, мой вопрос: как я могу сделать Ясниппет первым кандидатом в автозаполнении? И чего-то не хватает в моем .emacs конфиге?

Любая помощь приветствуется.

1 Ответ

5 голосов
/ 26 марта 2012

ac-config-default устанавливает хуки для установки разумных значений по умолчанию ac-sources. Эти хуки (особенно ac-common-setup) могут мешать вашим настройкам.

Вы можете проверить это, посмотрев фактическое значение ac-sources ( Ch v ac-sources) в буфере js-mode, чтобы увидеть, было ли оно изменено путем сравнения с вашим пользовательским значением.

Если это так, я вижу два решения:

  • прекратить использование 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))
...