2012-05-19 21 views
5

Sto cercando un plug-in per fare il popup di completamento automatico per lo sviluppo C++ in emacs. quello che ho provato sono Cedet Semantics e lo Autocompletion mode, sono abbastanza accurati in termini di completamento dei nomi di variabili e funzioni purché abbia già alcune parole. Per esempio, ho una classe denominata foo e una funzione che restituisce un intero 1ricerca funzionalità di completamento automatico in emacs

class foo{ 
    int getInt(){return 1}; 
}; 

Nel metodo principale, fino a quando ho iniziato a digitare questo

int main(){ 
foo bar; 
bar.get... 
} 

i plugin non hanno alcun problema spuntando suggerimenti come bar.getInt(). Tuttavia, quello che sto cercando è qualcosa di simile in Eclipse, non appena premo il "punto", potrebbero essere generate possibili scelte per me. È possibile in Emacs? Grazie

risposta

2

Dipende dalle impostazioni del completamento automatico & CEDET. Sembra che il completamento automatico sia impostato per mostrare possibili completamenti solo dopo aver digitato più caratteri. Puoi controllare il valore della variabile ac-auto-start - se questo è un numero, dopo questo numero di caratteri verrà chiamato il completamento automatico. Un'altra cosa importante è ciò che è nella variabile ac-sources - per lavorare con CEDET è necessario utilizzare la fonte di completamento ac-source-semantic-raw o ac-source-semantic. A completamento automatico dopo . o -> si può provare a utilizzare semantica di built-in di completamento con qualcosa di simile:

(defun my-c-mode-cedet-hook() 
(local-set-key "." 'semantic-complete-self-insert) 
(local-set-key ">" 'semantic-complete-self-insert)) 
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook) 

P.S. Hai visto my article on CEDET & C++?

+1

Ehi Alex! In realtà ho visto il tuo articolo e sto cercando di imitare quello che hai fatto, ma non ho potuto configurarlo correttamente. Beh, ho qualche domanda. Riguardo l'inserzione *** dot ***, ho fatto quello che hai suggerito sopra, ma ogni volta che ho digitato un punto *** come nel caso precedente dopo ** bar *** , Ho ricevuto questo messaggio *** La definizione della funzione del simbolo è nullo: eieio-build-class-alist *** e non è stato nemmeno possibile inserire un normale segno di punto. Anche il *** ac-source ***, sto usando il pacchetto di completamento automatico, sembra che l'ac-source ne faccia parte. qual è il rapporto tra loro, io sono un po 'confuso. Grazie –

+0

btw, ho impostato la variabile *** ac-auto-start ** su 4, ma ogni volta che ho avviato Emacs, dovevo controllare manualmente il valore della variabile digitando CH v ** ac-auto -prima prima ***, poi il mio inserimento *** dot *** funzionerebbe in seguito, altrimenti ho continuato a ottenere la definizione di *** errore void ***. A proposito, il punto *** sembra avere problemi a trovare anche le intestazioni di sistema, come ho digitato un punto dopo un oggetto Vector, non ho potuto vedere la funzione size() spuntare come volevo. Grazie mille –

+0

hmm, è strano - sembra che Eieio non sia stato caricato correttamente. Quale versione di Semantic stai usando? –

0

Ho trovato che cedet è davvero deludente, soprattutto nei progetti di cmake.

Si consiglia di utilizzare https://github.com/Andersbakken/rtags Sottolinea gli errori durante la digitazione e l'utilizzo di completamenti intelligenti. Basta aggiungere questo al tuo file di init dopo aver ottenuto i pacchetti richiesti di emacs

(require 'rtags) 
(require 'popup) 
(require 'rtags-ac) 
(setq rtags-completions-enabled t) 
(rtags-enable-standard-keybindings c-mode-base-map) 
(add-hook 'c++-mode-hook 
      (lambda() 
      (setq ac-sources '(ac-source-rtags) 
))) 
Problemi correlati