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

标签 macos haskell ide text-editor textmate

我是 mac 新手,我正在用我需要的所有程序设置我的计算机,其中之一是 Haskell。

令我惊讶的是,OS X 的 Haskell 平台与 Windows 中的不同(那里有一个基于平台安装的 GUI 编辑器 - winGHiC)。环顾四周后,我发现这个编辑器 TextMate 应该与 Haskell 兼容,但我发现设置 Haskell Bundle 非常复杂。为了它。

我已经下载并安装了以下内容:

  • 适用于 Mac OS X 的 Haskell 平台
  • Xcode 3.4(Haskell 先决条件)
  • 文字伴侣
  • haskell.tmbundle 文件(上面提到过)

  • 有没有人熟悉如何让它工作?详细的逐步解释对我来说意义重大,就像我说的,自从我第一次使用 OS X 以来,我只有 1 天。

    谢谢一堆。

    最佳答案

    好吧,您发现这些天 tmbundle 在 Github 上是一件好事。

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

    (有一些关于 TextMate II 中集成终端的讨论,但谁知道呢?非集成终端的一个令人讨厌的功能是,人们很想通过单击 command-R 而不是通过在 ghci 中执行 :r 来“重新加载”。 ;在某些狂热情况下,我会打开 15 个终端副本。)

    许多不错的功能只是一般的 TextMate 东西,由语言描述决定,因此阅读 TextMate 细节的一般描述可能会很好。例如,如果多行被高亮显示,则 command-/用 -- 将它们注释掉。 s;或者,如果它们已被评论,则取消评论它们。早在我意识到它已经存在之前,我已经拼凑了一些东西来做到这一点,因为没有仔细研究手册。

    当然,一切都有键绑定(bind),而且很容易添加自己的键来运行小脚本和插入小片段,比在 Emacs 中要多得多,比如说。

    Bundles点击 Bundle Editor并检查文本中的不同类型。

    因此,例如,使选项卡触发器启动语言扩展编译指示 {-#LANGUAGE ... #-}光标所在的空间...复制一份 Snippet并替换

    {-#LANGUAGE ${1}#-}
    

    选择 Activation: Tab Trigger ,和(比如说)LANG作为触发器。

    一件好事是它们都是 shell 脚本,或者(像这个)带有一些 TextMate 变量的部分 shell 脚本,您几乎可以用自己喜欢的语言编写它们。 (对于 Haskell 捆绑包,我不再有任何 Haskell 捆绑包可言,但对于其他捆绑包,我有。)

    语法高亮出人意料的好,但会跳过一些花哨的扩展,例如"PackageImports"、GADT 语法、Haddock 文档系统的标记以及其他一些奇怪的东西。我已经破解了我自己的,但我发现语法文件的格式非常难以理解,因此向您发送副本是没有用的。 Haskell.tmbundle在过去的两三年里,一些知识渊博的 Haskellers 对它进行了修改。第一个制作它的人只是在学习 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 上查找”键绑定(bind)/选项作用于突出显示的术语;这是 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 以获取推断的类型签名。我有一个键绑定(bind)来将推断类型显示为显示的 html 位,但也可以插入它。这有点微妙,但这里是类型显示的文本
    #!/bin/bash
    word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}
    module="${TM_FILEPATH}"
    echo $word | typeof $module 
    

    选择 Input: Selected Text , Or: Line ; Output: Show as Tool Tip , Activation : Key Equivalent (然后选择一个 keybinding ,我的是 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 friend 可能想到了什么。我一直想把我的 tmbundle 的“ fork ”放在 github 上,但这并不太令人兴奋,而且 Bundle 目录的组织永远打败了我。

    关于macos - 在 Mac OS X 上为 Haskell 编程设置 TextMate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682339/

    相关文章:

    macos - 如何为 Mac App Store 中的应用列表设置背景图片?

    haskell - 对整数树求和 (Haskell)

    haskell - 如何用 Haskell 解析 ASN.1?

    haskell - 将常量应用于数据类型的所有字段

    ide - Flex/Bison IDE?

    python - python 中的 md5 输出与命令行不同(即使在二进制模式下)

    c++ - 在 Mac 上使用 MoltenVk/Vulkan 获取 VK_ERROR_LAYER_NOT_PRESENT

    java - OSX 中使用智能卡和 BC 的数字签名

    java - Eclipse IDE 无法解析我的 src 类名

    c++ - 代码信息