使用haskell-mode在Emacs中进行Haskell自动完成

时间:2010-08-06 14:24:07

标签: haskell emacs autocomplete haskell-mode

我在emacs中安装了haskel-mode。然后我写下我的.emacs:

(load "~/.emacs.d/haskell-mode/haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t)
(put 'downcase-region 'disabled nil)

我必须在我的conf文件中添加哪些内容,emacs可以为Haskell自动完成?或者Haskell模式没有这种可能性?

6 个答案:

答案 0 :(得分:18)

如果没有特定于语言的支持,您可以使用标记。这是一种通用的完成机制。

  1. 生成TAGS文件,其中包含标识符列表及其定义位置。 Emacs附带了etags程序,可以用多种语言来完成,但不是Haskell; ghc附带hasktags

  2. 使用TAGS加载M-x visit-tags-table文件。

  3. 标签不依赖于上下文,因此他们会随意地不断推荐类型,值,构造函数等。它们也不会提供高级功能,例如轻松显示值的类型。最重要的标签命令是:

    • M-TABcomplete-symbol)根据加载的代码列表完成标识符。

    • M-.find-tag)前往定义点标识符的位置,必要时打开包含文件。

    • M-*pop-tag-mark)返回M-.之前的位置。

    • M-x tags-apropos显示与正则表达式匹配的标识符列表。

    有关详细信息,请查看Emacs手册中的“标签”。


    对于更加平坦但全自动的机制,有动态缩写功能。 C-M-/dabbrev-completion)查找大多数打开的缓冲区以完成;这完全是与语言无关的,所以它甚至可以在字符串,注释等中找到单词。 M-/dabbrev-expand)类似,但在点之前直接完成最近的匹配。

答案 1 :(得分:10)

ghc-mod为Emacs中的Haskell提供了一些完成,以及使用hlint和ghc进行检查。与M- /结合使用,对我来说已经足够了。

答案 2 :(得分:8)

haskell-mode目前没有提供此类可能性。有一些关于为CEDET实现haskell解析器的工作 - 在这种情况下,用户将自动获得自动完成功能。但是这项工作已经开始了很久以前......

答案 3 :(得分:7)

setup稍微复杂一些。它使用auto-complete基础设施 显示自动类似于传统IDE的候选下拉列表。我下载了this script硬编码所有关键字。除此之外,我使用ghc-mod生成模块名称。

答案 4 :(得分:6)

作为一种“廉价而愉快”的自动完成机制,请不要忽视M-/。它完全是启发式和语言无关的,但却非常有效。

答案 5 :(得分:2)

除了自动完成您自己的代码之外,您还可以使用company-ghc为标准库,导入名称和编译指示名称获得自动完成(使用apidocs)。我发现this guide非常有帮助。请注意,我还没有让它完全为我自己工作,但我觉得我很接近: - )