我在想我理想的haskell编辑工作流程:
有没有人设置过这样的东西?我们的目标是让hlint不断观察我的代码中的样式问题,并且可以快速更改ghci,而不必在vim中保存文件。
我在考虑使用类似watchr的东西进行自动化。
答案 0 :(得分:7)
您可以使用BufWrite
自动命令:
例如,将其放在~/.vimrc
:
au BufWrite *.hs !echo % >> ~/saves.txt
每次保存haskell文件时都会运行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函数中,让你切换它(以及设置参数为如何找到你的ghci和hlint终端。)
答案 1 :(得分:2)
不确定您是否还在寻找,但自动hlint问题的解决方案是Syntastic,它会自动在您的文件上运行hlint或ghc-mod并突出显示行/列表中的错误列出错误/警告/风格警告。
此外,当您将光标移动到该行时,它会在状态栏中显示消息/注释。
答案 2 :(得分:1)
您可以尝试编写一个链接到ghci
的编辑器的脚本,并在您点击":r\n"
时发送C-s
。我不知道你怎么能这样做,但我很乐观有一种使用vim的方式。
答案 3 :(得分:0)
https://github.com/ndmitchell/ghcid支持在文件更改时自动重新加载GHCi。
例如:ghcid '--command=stack ghci' --test=main
答案 4 :(得分:0)
这是一个脚本 inotifywait-stack-ghci.hs
:
#!/bin/sh
$(while inotifywait -e close_write $1; do pkill ghc; done) &
while inotifywait -e close_write $1
do
sleep 2
stack ghci $1
done
我通常在这样的终端上运行它:
exec ./inotifywait-stack-ghci.hs abc.hs
欢迎提出改进这些问题的建议!