La risposta di @ Doug è un po 'obsoleta e il suo focus è sull'espansione del codice usando frammenti predefiniti.
Penso che la domanda dell'OP riguardi l'intellisense (ad esempio il nome del metodo di completamento automatico di una classe).
l'amplificazione hippie era popolare, l'analizzatore di sintassi è tag emacs . Supporta quindi tutte le lingue supportate da ctags (incluso C ++ , Java). Ma il risultato non è perfetto perché ctags usa solo espressioni regolari per analizzare il codice. Vedi il mio init-hippie-expand.el per i dettagli. Puoi iniziare controllando il valore dihippie-expand-try-functions-list
il completamento automatico è moderno con un'interfaccia utente sofisticata (menu a discesa, anche nella finestra della console). Se usi clang come backend. L'intellisense è molto meglio. Per far funzionare il clang, devi installare auto-complete-clang che è il plugin di auto-complete. Supporta solo i supporti del linguaggio clang (C / C ++ / Obj-C). Come ha sottolineato Sylvain Benner , puoi usare emacs-eclim come back-end di analisi java che in realtà chiama l'eseguibile di eclipse. Quindi il completamento automatico può supportare java. Vedi il mio init-auto-complete.el per i dettagli.
semantic fornisce sia l'interfaccia utente che il motore di analisi back-end. È lento. L'interfaccia utente a discesa è OK ma richiede la finestra X. Il risultato intellisense è migliore dei tag. E la documenazione è troppo geniale per me. Vedi init-semantic.el per i dettagli.
la modalità azienda è simile al completamento automatico, la differenza è che impacchetta tutto in un unico pacchetto. Ad esempio, gli sviluppatori C ++ devono solo installare la modalità azienda (il completamento automatico richiede alcuni plugin di terze parti). Un'altra differenza nell'interfaccia utente è che l'azienda mostrerà automaticamente il candidato . Quindi premi meno tasti in compagnia. È possibile fare la stessa cosa nel completamento automatico dopo la personalizzazione.
In sintesi, il completamento automatico, le società sono le due scelte più popolari. Anche l'espansione semantica e hippy è benvenuta ma meno utilizzata. Altri sono troppo banali per essere menzionati e le loro caratteristiche sono già coperte dai big four. Ad esempio, il completamento automatico potrebbe utilizzare yasnippet come sorgente di input (il completamento automatico fornisce l'interfaccia utente, ma i candidati effettivi vengono prodotti dal back-end yasnippet).
Suggerisco di utilizzare il completamento automatico o la società come plug-in di completamento del codice principale e di espansione semantica o hippie come plug-in complementare .
Uso la modalità azienda e hippie-espansione perché,
Ora (anno 2017) la modalità azienda è più attivamente gestita rispetto al completamento automatico e ha più plug-in di terze parti (ad esempio, plug-in latex)
hippie-expand non è molto attivo ma non occupa la TAB
chiave utilizzata dalla modalità azienda / semantica / completamento automatico
Se si utilizza la modalità azienda per C ++ / Java, è possibile che si desideri modificare company-backends
.
Qualche suggerimento in più sulla modalità azienda,
Potrebbe essere necessario modificare il valore di company-backends
. Ad esempio, supponiamo che il suo valore sia (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Quindi se company-eclim
puoi ottenere candidati diversi da zero, company
pensa che stai scrivendo java, quindi NON eseguirà backend dopo company-eclim
.
Adesso diamo un'occhiata (company-dabbrev-code company-gtags company-etags company-keywords)
. Tutti questi quattro backend verranno utilizzati insieme. Ad esempio, anche dopo company-dabbrev-code
aver recuperato con successo candidati diversi da zero, gli altri tre backend vengono comunque eseguiti.
Nel mondo reale, è spesso necessario modificare nuovamente l'ordine dei backend o aggiungere nuovi backend ( company-rtags
ad esempio).
complete.el
provare la libreria standard . È molto vecchio e poco conosciuto, ma il tipo di completamento nel buffer che fornisce può essere utile.M-x find-library complete
, quindi leggi il commento nel file.