簡體   English   中英

在Mac OS X上為Haskell編程設置TextMate

[英]Setting up TextMate for Haskell programming on Mac OS X

我是mac新手,我正在使用我需要的所有程序進行計算機設置,其中一個是Haskell。

令我驚訝的是,OS X的Haskell平台與Windows不同(在平台安裝上有一個GUI編輯器 - winGHiC)。 看了很多之后,我發現這個編輯器TextMate應該與Haskell兼容,但我發現為它設置Haskell Bundle非常復雜。

我已經下載並安裝了以下內容:

  • 適用於Mac OS X的Haskell平台
  • Xcode 3.4 (Haskell先決條件)
  • TextMate的
    • haskell.tmbundle文件(如上所述)

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

謝謝一堆。

好吧,你發現這些日子里有關於Github的tmbundle是好事。

您應該可以通過單擊Bundles ,然后單擊Haskell找到內置選項。 標准的Haskell.tmbundle中相當少。 最明顯有用的是... load file command-shift-rcommand-R 如果你已經寫了一個結尾為.hs或.lhs的模塊,那么......在ghci中打開它。

(在TextMate II中有一些關於集成終端的討論,但是誰知道呢?非集成終端的一個令人討厭的特性是,通過單擊命令-R而不是通過執行以下操作來“重新加載”:r inside ghci ; in我會開發15個終端打開的瘋狂。)

許多不錯的功能只是一般TextMate的東西,由語言描述決定,所以閱讀TextMate細節的一般描述可能會很好。 例如,如果幾行highlighed,然后命令- /評論他們與-- S; 或者,如果它們已被評論,則取消評論它們。 在我意識到它已經存在之前,我已經把一些東西一起砍掉了,但是我沒有仔細研究過這本手冊。

當然,一切都有鍵綁定,並且很容易添加自己的腳本來運行小腳本並插入一些小片段,比Emacs更多。

Bundles單擊Bundle Editor並檢查不同類型的文本。

因此,例如,要創建一個制表符觸發器來啟動語言擴展pragma {-#LANGUAGE ... #-} ,其中光標位於空格中...制作一個Snippet和替換的副本

{-#LANGUAGE ${1}#-}

選擇Activation: Tab Trigger ,並(例如) LANG作為觸發器。

一個好處是它們都是shell腳本,或者(就像這一個)部分shell腳本和一些TextMate變量,你幾乎可以用自己喜歡的語言編寫它們。 (對於Haskell包,我沒有任何Haskell可以說的,但對於我做的其他包。)

語法高亮顯然是令人驚訝的聲音,但跳過一些奇特的擴展,例如“PackageImports”,GADT語法,Haddock文檔系統的標記,以及其他一些奇怪的東西。 我已經自己攻擊了,但是我發現語法文件的格式非常難以理解,所以發送副本沒用。 Haskell.tmbundle在過去的兩三年了仔細的校勘一些知識淵博Haskellers。 最初制作Haskell的人只是學習Haskell,並且沒有編寫Haddocked模塊,但另一方面,他似乎非常熟練並且對TextMate機器有着深入的了解。

請注意,TextMate以相當奇怪的方式存儲您在Bundle Editor中所做的修改。 TextMate附帶的包,例如CRubyHTMLLaTeX等,位於/Applications/Textmate.app/.../Bundles 您安裝的是/Library/Application\\ Support/TextMate/Bundles 當您通過Bundle Editor進行修改時,它們將存儲在您的本地~/Library/Application\\ Support/TextMate/Bundles. 它有點意義,但它有點復雜,阻礙了Haskell捆綁的公共改進。 (我與人分享的一個捆綁包,而不是Haskell的捆綁包,我保留在git版本下的最終目錄中,因此原始版本和我的修改版本在一起。)

“查看Hoogle”鍵綁定/選項對突出顯示的術語起作用; 這是hayoo網站的副本,可以搜索類型簽名的使用

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

如果您安裝了hoogle,那么您可以使用如下腳本對hoogle進行本地調用:

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

選擇保存:無,輸入:選定文本,或:Word,輸出:顯示為HTML

我所做的其他修正大多是微不足道的,比如`{ - #LANGUAGE ...# - }的標簽觸發片段,或者我自己的怪癖。

有一兩件事值得一提的是,我設法整合是typeof從Hackage可執行的, 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可執行文件,第一個cabal安裝,第二個是上面評論的白痴,在我的本地編譯~\\bin來繞過一些逃避廢話。 在這里,您應該選擇Output : Insert as Snippet

對不起,我只想到隨意的事情。 你應該繼續在這個標題下發帖提問,因為我認為值得看看一個人如何絆倒,還有我們聰明的Haskeller朋友可能會想到的。 我一直意味着把我的tmbundle的'fork'放在github上,但它並不太令人興奮,而Bundle目錄的組織永遠會讓我失望。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM