2011-10-09 96 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,並突出顯示位置列表中的錯誤/警告/樣式警告。

此外,當您將光標移動到該行時,它會在狀態欄中顯示消息/註釋。