2012-03-26 15 views
8

Sto utilizzando auto-completamento e yasnippet in Emacs e sono confuso dalle loro impostazioni. Ho messo il seguente codice nel mio .emacs:Informazioni sul completamento automatico e yasnippet in 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) 

Sto cercando di impostare yasnippet come primo candidato nel menu a comparsa completamento automatico. Tuttavia, come mostra l'esempio seguente, questo non funziona con le mie impostazioni attuali: quando digito la parola for, formatItem è in prima posizione e for in seconda. formatItem è solo una funzione locale nel buffer corrente.

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

Quindi la mia domanda è: come posso rendere yasnippet il primo candidato in completamento automatico? E c'è qualcosa che manca nella mia configurazione .emacs?

Qualsiasi aiuto è apprezzato.

+0

non so la risposta, ma completamento automatico ha un sistema di apprendimento integrato, in modo che il più delle volte si seleziona un candidato per un completamento più alto sarà la prossima volta. Quindi potresti doverlo usare solo per un po ', e tutti i frammenti utilizzati frequentemente verranno automaticamente spostati verso l'alto. – Tom

risposta

5

ac-config-default installa ganci per impostare valori predefiniti di default ac-sources. Questi hook (specialmente ac-common-setup) potrebbero interferire con le tue impostazioni.

È possibile controllare questo guardando il valore effettivo di ac-sources (C-h vac-sources) in un buffer js-mode per vedere se è stato modificato in confronto al valore personalizzato.

Se questo è il caso, vedo due soluzioni:

  • arresto utilizzando ac-config-default e specifiy tutti autocomplete impostazioni,
  • consigliare il gancio difettoso mettere ac-source-yasnippet all'inizio del ac-sources dopo la sua esecuzione. Supponendo ac-comune-setup è infatti il ​​piantagrane, questo sarebbe simile:
(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

Grazie per la tua risposta. È il caso come hai descritto. Ma non sto capendo chiaramente il metodo 2 di cui sopra. Puoi dirmi qualcosa in più? Grazie. – Boris

+0

@Ryan vedi la mia modifica. – Francesco

+1

Salve, dopo aver inserito il codice nel mio .emacs, il valore effettivo di AC-sources sembra essere quello in cui Ch v in un file js viene emesso: Il suo valore è (ac-source-yasnippet ac-source-filename ac- source-symbols ac-source-words-in-buffer ac-source-words-in-same-mode-buffer-ac-source-files-in-current-dir) .Local nel buffer set.js; Ma quando digito la parola "per", il menu popup restituisce comunque il grafico che ho fornito nella domanda. Non ne ho idea. – Boris

Problemi correlati