2011-04-15 25 views
11

我是mac新手,並且正在讓我的計算機安裝程序中包含我需要的所有程序,其中之一是Haskell。在Mac OS X上爲Haskell編程設置TextMate

令我驚訝的是,OS X的Haskell平臺與Windows不同(在平臺安裝中構建了一個GUI編輯器 - winGHiC)。看了很多後,我發現這個編輯TextMate這應該是與Haskell兼容,但我發現它很複雜,爲它設置Haskell Bundle

我已經下載並安裝以下軟件:

  • 哈斯克爾平臺的Mac OS X
  • 的Xcode 3.4 (Haskell的先決條件)
  • TextMate的
    • haskell.tmbundle文件(如上所述)

是否有人熟悉如何讓它工作?這對我來說意味着很多詳細的逐步解釋,就像我說的,自從我第一次使用OS X以來,我一直只有1天。

謝謝一堆。

+0

WinGHCi本身不是「GUI編輯器」*。你可以使用命令行中的'ghci'程序,這在很大程度上是等價的。我就是做這個的。 我其實更喜歡WinGHCi,它的命令完成很糟糕。 – Ezra 2011-04-15 23:02:02

回答

28

嗯,這是很好的工作,你發現tmbundle現在在Github上。

您應該能夠通過點擊Bundles,然後Haskell找到內置選項。標準Haskell.tmbundle中有相當少的。最明顯有用的是...加載文件command-shift-rcommand-R。如果你寫了一個結尾爲.hs或.lhs的模塊,它會以ghci打開它。但是誰知道呢?一個非集成終端的一個令人討厭的特點是,人們試圖通過點擊命令-R而不是通過執行來重新加載:r在ghci;在某些瘋狂,它會發展,我有15個副本的終端打開。)

很多不錯的功能只是一般的TextMate的東西,由語言描述決定,所以它可能是好的閱讀一般性描述TextMate細節。例如,如果幾個線highlighed,然後命令 - /評論他們與-- S;或者,如果它們已被評論,則取消註釋。我砍死在一起的東西要做到這一點,沒過多久,我意識到它已經在那裏了,沒有研究說明書不夠緊密。

一切有鍵綁定,當然,它是很容易的添加自己的運行小腳本,然後插入小片段,遠遠超過在Emacs,說。

Bundles點擊Bundle Editor並研究不同性質的東西的文本。

因此,例如,做一個標籤觸發啓動語言擴展編譯{-#LANGUAGE ... #-}光標所在的空間...做出Snippet的副本並替換

{-#LANGUAGE ${1}#-} 

選擇Activation: Tab Trigger,和(比如說)LANG作爲觸發器。

一件好事就是它們都是shell腳本,或者(像這樣)一些帶有一些TextMate變量的部分shell腳本,你可以用你自己的首選語言編寫它們。 (對於Haskell包,我沒有任何Haskell人可以談論,但是對於其他捆綁包)。

語法高亮顯示出人意料地合理,但是出現了一些奇特的擴展,例如, 「PackageImports」,GADT語法,Haddock文檔系統的標記以及其他一些古怪的東西。我已經破解了我自己的,但是我發現語法文件的格式非常難以理解,所以發送一份副本是沒有用的。 Haskell.tmbundle在過去的兩三年中已經被一些知識淵博的哈斯克勒斯所修正。最初做這件事的人只是學習Haskell,並沒有例如組成了Haddocked模塊,但另一方面,他似乎非常熟練,並且對TextMate機器有深入的瞭解。

通過TextMate以一種相當奇怪的方式存儲您在Bundle Editor中所做的修正的通知。 TextMate附帶的捆綁包,例如C,Ruby,HTML,LaTeX等在/Applications/Textmate.app/.../Bundles。你安裝的是/Library/Application\ Support/TextMate/Bundles。當你通過Bundle Editor進行修正時,它們被存儲在你的本地~/Library/Application\ Support/TextMate/Bundles.這有點合理,但有點複雜,並且阻礙了Haskell包的公共改進。 (我與人分享的一束,而不是哈斯克爾,我保留在git修訂版的最後一個最外面的目錄中,所以原始和我的校正結合在一起。)

「Hoogle查找」鍵綁定/選項突出顯示的條款;這裏是爲hayoo網站的翻版,如果你CABAL安裝hoogle可搜索式簽名

echo "<meta http-equiv=\"refresh\" content=\"0; 
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}\">" 

的用途,那麼你可以做一個本地電話用一個腳本來hoogle像這樣:

hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}' 

選擇保存:沒什麼,輸入:選定的文本,或者:字,輸出:顯示爲HTML

我已經做多瑣碎的其他emendations,就像一個標籤觸發片段的`{ - #語言...# - }或者我自己的怪癖。

值得一提的是,我設法整合了來自Hackage的typeof可執行文件,cabal install typeof,它運行到ghci以獲得推斷類型簽名。我有一個鍵綁定來顯示HTML的顯示位的推斷類型,但也要插入它。這是一個有點微妙,但這裏是類型

#!/bin/bash 
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} 
module="${TM_FILEPATH}" 
echo $word | typeof $module 

的顯示器選擇Input: Selected TextOr: Line文本; Output: Show as Tool TipActivation : Key Equivalent(然後選擇一個鍵綁定,礦是control-option-command-j)類似地,對於類型插入通過typeof使一個新的C(命令文件)標題和包括這樣的:

#!/bin/bash 
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} 
module="${TM_FILEPATH}" 
echo $word | typeof $module | typeof_wordorder 

# typeof_wordorder is the following hack compiled 
# in my local ~/bin 
# module Main where 
# main = interact reword where 
# reword :: String -> String 
# reword xs = 
#  xs ++ (head . words . concat . lines $ xs) 

這裏typeoftypeof_worderorder是Haskell的可執行文件,所述第一第二個就是上面評論過的白癡,編在我的當地~\bin左右一些逃脫的廢話。在這裏您應該選擇Output : Insert as Snippet

對不起,我只是在想隨機的事情。你應該在這個標題下繼續發佈問題,因爲我認爲看看人們如何絆倒是值得的,但也是我們聰明的哈斯克勒朋友可能想到的。我保留在github上放置我的tmbundle的'fork'的意思,但它並不太刺激,並且Bundle目錄的組織永遠打敗了我。

+0

哇謝謝!你不知道我多麼感謝你所涵蓋的所有細節。如果可以,三倍「接受答案」 – Panicos 2011-04-15 23:56:13