2010-08-06 135 views
20

我在emacs中安装了haskel-mode。然后,我写在我的.emacs:Haskell在Emacs中使用haskell模式自动完成

(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) 

我必须在Emacs中可以自动完成对哈斯克尔我的conf文件中添加什么?或者Haskell模式不存在这种可能性?

回答

18

当没有语言特定的支持时,可以使用标签。这是一个通用的完成机制。

  1. 生成一个TAGS文件,其中包含一个标识符列表及其定义的位置。 Emacs附带etags程序可以在很多语言中执行此操作,但不是Haskell; ghc附带hasktags

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

标签不是依赖于上下文的,所以他们会随便地提示类型,值,构造函数等。他们也不会提供高级功能,例如轻松显示值的类型。最重要的标记的命令是:

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

  • M-.find-tag)转到定义点标识符的地方,如果需要打开包含文件。

  • M-*pop-tag-mark)回到原来的位置M-.

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

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


对于偶较粗略,但全自动机构,有动态缩写特征。 C-M-/dabbrev-completion)在大多数开放缓冲区中查找完成;这完全是与语言无关的,所以它甚至会在字符串,评论等等中找到单词。 M-/dabbrev-expand)是相似的,但直接完成到最接近的匹配点之前。

8

haskell-mode目前没有提供这种可能性。有关CEDET的haskell解析器的实现方面的一些工作 - 在这种情况下,用户将自动获得自动完成功能。但是这项工作并没有太多时间开始......

+0

你知道在CEDET上Haskell的工作进展如何吗? – 2011-10-26 20:27:55

10

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

+0

Downvoter:谨慎解释? – danlei 2014-12-16 00:26:46

7

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

5

作为一种“便宜而开朗”的自动补全机制,请不要忽略M-/。这完全是启发式和独立于语言的,但却非常有效。

2

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