2010-08-06 15 views
20

Instalé haskel-mode en emacs. Entonces escribo en mi .emacs:Autocompletado de Haskell en Emacs usando el modo 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) 

¿Qué debo añadir en mi archivo de configuración que podrían emacs autocompletar para Haskell? ¿O el modo Haskell no existe tal posibilidad?

Respuesta

18

Cuando no hay soporte específico para un idioma, puede usar las etiquetas . Este es un mecanismo de finalización genérico.

  1. generar un archivo TAGS, que contiene una lista de identificadores y donde se define. Emacs viene con el programa etags para hacer esto en muchos idiomas, pero no en Haskell; ghc viene con hasktags.

  2. Cargue el archivo TAGS con M-x visit-tags-table.

Las etiquetas no dependen del contexto, por lo que indistintamente sugieren tipos, valores, constructores, etc. en todas partes. Tampoco proporcionarán funciones avanzadas, como mostrar fácilmente el tipo de valor. Los comandos de etiquetas más importantes son:

  • M-TAB (complete-symbol) completa un identificador de acuerdo con la lista cargada de etiquetas.

  • (find-tag) va al lugar donde se define el identificador en el punto, abriendo el archivo contenedor si es necesario.

  • M-* (pop-tag-mark) vuelve donde estaba antes de M-..

  • M-x tags-apropos muestra una lista de identificadores que coinciden con una expresión regular.

Para obtener más información, consulte "Etiquetas" en el manual de Emacs.


Para un mecanismo aún más cruda, pero totalmente automático, no es la característica dinámico abbrev. C-M-/ (dabbrev-completion) busca en la mayoría de los buffers abiertos una finalización; esto es completamente independiente del lenguaje, por lo que incluso encontrará palabras en cadenas, comentarios, lo que sea. M-/ (dabbrev-expand) es similar, pero se completa directamente con la coincidencia más cercana antes del punto.

8

haskell-mode actualmente no ofrece tal posibilidad. Existe algún trabajo sobre la implementación del analizador haskell para CEDET; en este caso, los usuarios obtendrán automáticamente las funciones de autocompletado. Pero este trabajo no comenzó hace mucho tiempo ...

+0

¿Sabe cómo ha ido progresando el trabajo en CEDET para Haskell? –

10

ghc-mod proporciona algo de compleción para Haskell dentro de Emacs, así como para verificar con hlint y ghc. En combinación con M- /, es lo suficientemente bueno para mí.

+0

Downvoter: ¿me importa explicarlo? – danlei

7

Mi setup es un poco más complicado.Utiliza la infraestructura auto-complete que muestra una lista desplegable de candidatos automáticamente similar a IDEs tradicionales. Descargué this script que codifica todas las palabras clave. Además de eso, uso ghc-mod para generar nombres de módulos.

5

Como mecanismo de autocompletado "barato y alegre", no pase por alto M-/. Es completamente heurístico e independiente del lenguaje, pero sorprendentemente efectivo.

2

Además del autocompletado para su propio código, también puede obtener autocompletado (incluso con apidocs) para la biblioteca estándar, nombres de importación y nombres de pragma usando company-ghc. Encontré this guide para ser muy útil. Tenga en cuenta que aún no lo pude hacer funcionar por completo, pero puedo sentir que estoy cerca :-)