自动重新加载ghci并在文件更新上运行hlint

Joe*_*Dyk 14 haskell ghci watchr

我在想我理想的haskell编辑工作流程:

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

有没有人设置这样的东西?我们的目标是让hlint不断观察我的代码中的样式问题,并且可以快速更改ghci,而不必在vim中保存文件.

我正在考虑使用像watchr这样的东西进行自动化.

ram*_*ion 7

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

例如,把它放在你的~/.vimrc:

au BufWrite *.hs !echo % >> ~/saves.txt 
Run Code Online (Sandbox Code Playgroud)

echo <CURRENT FILENAME> >> ~/saves.txt每次保存haskell文件时都会运行此命令.

因此,这是一种触发外部脚本的简便方法.

现在您可以编写一些iterm脚本来将命令转发到其他终端.就像是:

tell my_ghci_terminal
  write text ":r\n"
end tell
tell my_hlint_terminal
  write text "<RUN HLINT ON WHATEVER>"
end tell
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用vim自动命令触发相应的iterm脚本(传递当前文件名,以便脚本可以告诉ghci和hlint要处理哪个文件).

您可能想要打开和关闭它(您可能不希望为每个haskell文件执行此操作),因此请考虑将功能包装在vim函数中,以便您可以切换它(以及设置参数以确定iterm应该如何找到你的ghci和hlint终端).


Chr*_*ski 5

https://github.com/ndmitchell/ghcid支持文件更改时自动重新加载 GHCi。

例如:ghcid '--command=stack ghci' --test=main

  • ghcid 的 README 中值得注意的是,它“不提供对其启动的 ghci 的访问” (2认同)