2010-08-06 22 views
20

Ho installato haskel-mode in emacs. Poi scrivo nei miei .emacs:Completamento automatico Haskell in Emacs utilizzando la modalità haskell

(load "~/.emacs.d/haskell-mode/haskell-site-file") 
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t) 
(put 'downcase-region 'disabled nil) 

Cosa devo aggiungere nel mio file conf che emacs potrebbero automatico per Haskell? O la modalità Haskell non esiste tale possibilità?

risposta

18

Quando non esiste un supporto specifico per la lingua, è possibile utilizzare i tag . Questo è un meccanismo di completamento generico.

  1. generare un file TAGS, che contiene un elenco di identificatori e dove sono definiti. Emacs viene fornito con il programma etags per farlo in molte lingue, ma non Haskell; ghc viene fornito con hasktags.

  2. Caricare il file TAGS con M-x visit-tags-table.

I tag non dipendono dal contesto, quindi suggeriranno indiscriminatamente tipi, valori, costruttori, ecc. Ovunque. Inoltre, non forniranno funzionalità avanzate come la semplice visualizzazione del tipo di valore. I più importanti comandi tag sono:

  • M-TAB (complete-symbol) completa un identificatore in base alla lista caricata di tag.

  • M-. (find-tag) va al punto in cui è definito l'identificatore nel punto, aprendo il file contenente, se necessario.

  • M-* (pop-tag-mark) torna a dove eri prima M-..

  • M-x tags-apropos mostra un elenco di identificatori che corrispondono a un regexp.

Per ulteriori informazioni, consultare "Tag" nel manuale di Emacs.


Per un meccanismo ancor più crudo, ma completamente automatica, c'è il dinamica abbrev caratteristica. C-M-/ (dabbrev-completion) cerca nella maggior parte dei buffer aperti per un completamento; questo è completamente indipendente dalla lingua, quindi troverà anche parole in stringhe, commenti, qualsiasi cosa. M-/ (dabbrev-expand) è simile, ma si completa direttamente alla corrispondenza più vicina prima del punto.

8

haskell-mode attualmente non prevede tale possibilità. C'è un po 'di lavoro sull'implementazione del parser haskell per CEDET - in questo caso, gli utenti otterranno automaticamente le funzionalità di completamento automatico. Ma questo lavoro era iniziato non tanto tempo fa ...

+0

Sai com'è andato avanti il ​​lavoro su CEDET per Haskell? –

10

ghc-mod fornisce un po 'di completamento per Haskell in Emacs, oltre a controllare con hlint e ghc. In combinazione con M- /, è abbastanza buono per me.

+0

Downvoter: cura di spiegare? – danlei

7

Il mio setup è un po 'più complicato.Utilizza l'infrastruttura auto-complete che mostra un elenco a discesa di candidati automaticamente simile agli IDE tradizionali. Ho scaricato this script che codifica tutte le parole chiave. In aggiunta a ciò, io uso ghc-mod per generare nomi di moduli.

5

Come meccanismo di autocompletamento "economico e allegro", non trascurare lo M-/. È completamente euristico e indipendente dalla lingua, ma sorprendentemente efficace.

2

Oltre al completamento automatico per il proprio codice, è anche possibile ottenere il completamento automatico (anche con apidoc) per la libreria standard, i nomi di importazione e i nomi pragma utilizzando company-ghc. Ho trovato this guide molto utile. Nota, non l'ho ancora fatto funzionare per me stesso, ma posso sentire che sono vicino :-)

Problemi correlati