2012-03-26 11 views
8

Używam autouzupełniania i yasnippet w Emacsie i jestem zdezorientowany ich ustawieniami. I umieszczony następujący kod w moim .emacs:Informacje o autouzupełnianiu i yasnippet w 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) 

Próbuję ustawić yasnippet jako pierwszego kandydata z menu kontekstowego autouzupełniania. Jednak, jak pokazuje poniższy przykład, nie działa to z moimi bieżącymi ustawieniami: kiedy wpisuję słowo for, formatItem znajduje się na pierwszym miejscu, a for na drugim. formatItem to tylko lokalna funkcja w bieżącym buforze.

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

Moje pytanie brzmi: w jaki sposób mogę uczynić yasnippet pierwszym kandydatem w autouzupełnieniu? I czy jest coś czego brakuje w mojej konfiguracji .emacs?

Każda pomoc jest doceniana.

+0

ja nie znam odpowiedzi, ale auto kompletne posiada wbudowanego systemu uczenia się, a więc częściej wybrać kandydata na ukończenie, tym wyżej będzie następnym razem. Możesz więc używać go tylko przez pewien czas, a wszystkie często używane fragmenty będą automatycznie wypływać na górę. – Tom

Odpowiedz

5

instaluje haki, aby ustawić domyślne wartości domyślne: ac-sources. Te zaczepy (zwłaszcza ac-common-setup) mogą zakłócać Twoje ustawienia.

Można to sprawdzić patrząc na rzeczywistej wartości ac-sources (C-H przeciwkoac-sources) w buforze js-mode aby sprawdzić, czy został on zmodyfikowany w porównaniu do wartości niestandardowej.

Jeśli jest to przypadek, widzę dwa rozwiązania:

  • zaprzestać używania ac-config-default i specifiy wszystkie autocomplete ustawień
  • doradzić uszkodzony hak umieścić ac-source-yasnippet na początku ac-sources po jego uruchomieniu. Zakładając ac-common-setup jest rzeczywiście Troublemaker, będzie to wyglądać tak:
(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)) 
+0

Dziękuję za odpowiedź. Jest tak, jak opisałeś. Ale nie rozumiem dokładnie metody 2 podanej powyżej. Czy możesz mi powiedzieć coś więcej na ten temat? Dzięki. – Boris

+0

@Ryan zobacz moją edycję. – Francesco

+1

Cześć, po umieszczeniu kodu w moich .emacs, rzeczywista wartość ac-sources wydaje się być dokładnie tam, gdzie Ch v w pliku js wyprowadza: Jego wartość to (ac-source-yasnippet 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; Ale kiedy wpisuję słowo "za", menu kontekstowe nadal daje wykres, który podałem w pytaniu. Nie mam o tym pojęcia. – Boris