Come ottenere il completamento del codice in emacs?


20

So che emacs supporta il completamento del codice. Ma ad essere sincero non sono mai stato un buon lettore di FAQ, almeno per qualcosa a cui sono completamente nuovo. Quindi mi chiedo cosa devo scaricare e come fare in modo che emacs possa completare il mio codice intelligente in C ++ e Java. Oppure esiste un pacchetto che esegue il completamento del codice per molte delle principali lingue?

Risposte:


27

Il modo di base che funzionerà su qualsiasi tipo di buffer in emacs è l' abbreviazione dinamica usata dal colpire M-/(aka alt+ /)

Ciò espanderà il testo per duplicare altre stringhe già esistenti nel buffer corrente o in altri buffer attualmente aperti.

Per un completamento più esteso del codice specifico per il linguaggio C ++ o Java (o altri), ti consigliamo di esaminare un modello di codice o un pacchetto di frammenti. Alcuni sono discussi in questa domanda correlata su StackOverflow. Uno che viene comunemente menzionato in queste discussioni è yasnippet - c'è una demo screencast in questo post su un blog emacs .


+1. Potresti anche complete.elprovare 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.
Ha

21

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).

  1. 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

  2. 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.

  3. 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.

  4. 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 TABchiave 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-eclimpuoi ottenere candidati diversi da zero, companypensa 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-codeaver 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-rtagsad esempio).


qual è il miglior pacchetto di completamento automatico in Emacs 24 per latex?
dottorato il

@doctorate Penso che sia necessario utilizzare il completamento automatico e la sua fonte emacswiki.org/emacs/AutoCompleteSources , ma sono un programmatore anziché un utente in lattice, quindi è meglio controllare due volte nella community di Google e Emacs, molti ragazzi accademici lì .
chen bin,

si prega di notare che la modalità azienda supporta anche il lattice. Quindi suggerisco la compagnia anziché il completamento automatico
chen bin,

2

Risposta breve: non ne conosco nessuno per Emacs che è utile per Java. L'espansione dinamica non si occupa delle librerie nel percorso della classe, non sa nulla del codice che stai digitando, può solo espandersi nel testo che esiste già in uno dei buffer. JDE ed emacs-eclim provano a fornire questa funzionalità ma personalmente non ne sono rimasto colpito.


0

Risposta breve: M-/

Risposta lunga: RTFM :-)


6
+1, dio spero che la prossima domanda che vedo sia "bisogno di aiuto usando il comando RTFM"
rownage

@rownage: oh, questo è `` info-emacs-manual '' ( C-h r)
SamB,

1
Che ne dici C-h k M-/?
Doug Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.