2011-10-09 84 views
13

我在想我的理想Haskell的编辑工作流程ghci的运行与hlint:自动重新加载在文件更新

  • 我开三个终端(使用iterm2分割)。
  • 终端1运行vim编辑haskell源文件。
  • 当当前目录或子目录中的文件更新或创建时,终端2会自动运行hlint更改文件
  • 终端3运行ghci,自动加载/重新加载更改的文件。

有没有人设置过类似的东西?我们的目标是让hlint不断地观察我的代码以解决样式问题,并且可以快速更改ghci,而不必在除vim中保存文件之外进行任何操作。

我想为自动化使用类似watchr的东西。

+1

自动运行'hlint',看到我的答案[这里](HTTP://计算器。COM /问题/ 6323150/SBT样的功能,在最哈斯克尔建造生态系统/ 6324784#6324784)。由于GHCi是交互式的,因此它有点棘手。 – hammar

+3

国际海事组织你真的不想要ghci自动重新加载更改,因为所有绑定都丢失。由于我习惯偶尔在输入时打“C-s”,所以我总是对自己生气,因为我必须重新加载那些临时绑定。我也可以将它们放在文件中,但我懒得这样做。重新加载文件就像在该序列中按[:],[r],[enter]一样简单,那么情况如何? – fuz

+1

这不就是为什么emacs被发明的原因吗? :-) – pat

回答

7

您可以使用BufWrite自动命令运行在vim任意shell命令:

例如,把这个在您的~/.vimrc

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

这将运行echo <CURRENT FILENAME> >> ~/saves.txt每次保存哈斯克尔文件的时间。

所以这是触发外部脚本的简单方法。

现在你可以写一些iterm scripts中继命令到你的其他终端。喜欢的东西:

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

所以,你可以使用vim的自动命令触发相应ITERM脚本(通过当前的文件名,以便该脚本可以告诉ghci中和hlint文件要处理的)。

你可能想要打开或关闭这个功能(你可能不希望为每个haskell文件都这样做),所以想想把功能包装到一个vim函数中,它可以让你切换它(以及设置参数如何iterm应该找到你的ghci和hlint终端)。

1

您可以尝试为编辑器编写一个脚本,该脚本可以挂接到ghci,并在您点击C-s时发送":r\n"。我不知道你如何做到这一点,但我非常乐观地认为有一种使用vim的方法。

2

不知道你是否还在寻找,但是你的auto-hlint问题的解决方案是Syntastic,它会自动在你的文件上运行hlint或ghc-mod,并突出显示位置列表中的错误/警告/样式警告。

此外,当您将光标移动到该行时,它会在状态栏中显示消息/注释。