2011-10-09 12 views
13

Estaba pensando en mi flujo de trabajo de edición de Haskell ideales:recarga automáticamente ghci y hlint que se ejecuta en las actualizaciones de archivos

  • puedo abrir tres terminales (Split usando iterm2).
  • El terminal 1 ejecuta vim para editar los archivos fuente de Haskell.
  • El terminal 2 ejecuta automáticamente hlint en los archivos modificados cuando se crea un archivo en el directorio o subdirectorio actual o se crea
  • El terminal 3 ejecuta ghci, cargando/recargando automáticamente los archivos modificados.

¿Alguien ha configurado algo como esto? El objetivo es que hlint vea constantemente mi código para los problemas de estilo y que ghci esté disponible para cambios rápidos, sin tener que hacer nada más que guardar el archivo en vim.

Estaba pensando en usar algo como watchr para la automatización.

+1

Para ejecutar automáticamente 'hlint', véase mi respuesta [aquí] (http: // stackoverflow.com/questions/6323150/sbt-like-features-in-the-haskell-build-ecosystem/6324784 # 6324784). GHCi es un poco más complicado ya que es interactivo. – hammar

+3

IMO, realmente no desea que ghci se recargue automáticamente en el cambio, ya que se pierden todas las vinculaciones. Como tengo la costumbre de presionar ocasionalmente 'C-s' mientras escribo, siempre estaría enojado conmigo mismo, ya que tengo que volver a cargar esas ataduras temporales. También podría colocarlos en el archivo, pero soy demasiado vago para hacerlo. Recargar un archivo es tan fácil como presionar [:], [r], [enter] en esa secuencia, entonces, ¿cuál es el problema? – fuz

+1

¿No es por eso que se inventó emacs? :-) – pat

Respuesta

7

Puede ejecutar comandos shell arbitrarios en vim utilizando el AutoCommand BufWrite:

Por ejemplo, ponga esto en su ~/.vimrc:

au BufWrite *.hs !echo % >> ~/saves.txt 

Esto ejecutará echo <CURRENT FILENAME> >> ~/saves.txt cada vez que guarde un archivo de Haskell.

Así que esta es una manera fácil de activar scripts externos.

Ahora puede escribir algunos iterm scripts para transmitir comandos a sus otros terminales. Algo así como:

tell my_ghci_terminal 
    write text ":r\n" 
end tell 
tell my_hlint_terminal 
    write text "<RUN HLINT ON WHATEVER>" 
end tell 

para que pueda usar el AutoCommand vim para activar la secuencia de comandos iterm apropiada (pasando el nombre del archivo actual para la secuencia de comandos puede decir ghci y hlint qué archivo para procesar).

Probablemente quiera activar y desactivar esto (puede que no desee hacer esto para CADA archivo haskell), así que piense en ajustar la funcionalidad en una función vim que le permite alternarla (así como establecer argumentos para saber cómo debe encontrar sus terminales ghci y hlint).

1

Puede tratar de escribir un script para su editor que se enganche en ghci y envíe ":r\n" cada vez que pulse C-s. No sé cómo podrías hacerlo, pero soy bastante optimista de que hay una forma de usar vim.

2

No estoy seguro si aún está buscando, pero la solución a su problema de auto-hlint es Syntastic, que ejecuta automáticamente hlint o ghc-mod en su archivo y resalta las líneas/pone en las ubicaciones el error/advertencias/advertencias de estilo.

Además, cuando mueve el cursor a esa línea, muestra el mensaje/comentario en la barra de estado.

Cuestiones relacionadas