在Mac OS X上为Haskell编程设置TextMate

Pan*_*cos 11 ide macos textmate haskell text-editor

我是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以来,我只有一天.

谢谢一堆.

app*_*ive 28

好吧,你发现这些日子里有关于Github的tmbundle是好事.

您应该可以通过单击Bundles,然后找到内置选项Haskell.标准中相当少Haskell.tmbundle.最明显有用的是...加载文件command-shift-rcommand-R.如果你已经写了一个结尾为.hs或.lhs的模块,那么......在ghci中打开它.

(在TextMate II中有一些关于集成终端的讨论,但是谁知道呢?非集成终端的一个令人讨厌的特性是,通过单击命令-R而不是通过执行:r inside ghci;在某些情况下,人们很想重新加载' 疯狂它会发展我有15份终端开放.)

许多不错的功能只是一般TextMate的东西,由语言描述决定,所以阅读TextMate细节的一般描述可能会很好.例如,如果多个行被高亮,那么用--s 命令/注释它们; 或者,如果它们已被评论,则取消评论它们.在我意识到它已经存在之前,我已经将一些事情做了很多事情,而且还没有仔细研究过这本手册.

当然,一切都有键绑定,并且很容易添加自己的脚本来运行小脚本并插入一些小片段,比Emacs更多.

Bundles点击Bundle Editor并检查不同性质的东西的文本.

因此,例如,要创建一个制表符触发器来启动一个语言扩展pragma {-#LANGUAGE ... #-},其中光标在空间中...制作一个和一个Snippet替换副本

{-#LANGUAGE ${1}#-}
Run Code Online (Sandbox Code Playgroud)

选择Activation: Tab Trigger,并(例如)LANG作为触发器.

一个好处是它们都是shell脚本,或者(就像这一个)部分shell脚本和一些TextMate变量,你几乎可以用自己喜欢的语言编写它们.(对于Haskell包,我没有任何Haskell可以说的,但对于我做的其他包.)

语法高亮显然是令人惊讶的声音,但跳过一些奇特的扩展,例如"PackageImports",GADT语法,Haddock文档系统的标记,以及其他一些奇怪的东西.我已经自己攻击了,但是我发现语法文件的格式非常难以理解,所以发送副本没用.在Haskell.tmbundle过去两三年里已经仔细的校勘一些知识渊博Haskellers.最初制作Haskell的人只是学习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包的公共改进.(我与人分享的一个捆绑包,而不是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}\">"
Run Code Online (Sandbox Code Playgroud)

如果您安装了hoogle,那么您可以使用如下脚本对hoogle进行本地调用:

 hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}'
Run Code Online (Sandbox Code Playgroud)

选择保存:无,输入:选定文本,或: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 
Run Code Online (Sandbox Code Playgroud)

选择Input: Selected Text,Or: Line; Output: Show as Tool Tip,Activation : 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)
Run Code Online (Sandbox Code Playgroud)

这里typeoftypeof_worderorderHaskell可执行文件,第一个cabal安装,第二个是上面评论的白痴,在我的本地编译,~\bin以绕过一些逃避废话.在这里你应该选择Output : Insert as Snippet

对不起,我只想到随意的事情.你应该继续在这个标题下发帖提问,因为我认为值得看看一个人如何绊倒,还有我们聪明的Haskeller朋友可能会想到的.我一直意味着把我的tmbundle的'fork'放在github上,但它并不太令人兴奋,而Bundle目录的组织永远会让我失望.