20

我安装haskel-mode在emacs中。然后我写在我的 .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模式没有这种可能?

4

6 回答 6

18

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

  1. 生成一个TAGS文件,其中包含标识符列表及其定义位置。Emacs 附带了etags许多语言的程序来执行此操作,但 Haskell 没有;ghc 自带hasktags

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

标签不依赖于上下文,因此它们会在任何地方不加选择地建议类型、值、构造函数等。它们也不会提供高级功能,例如轻松显示值的类型。最重要的标签命令是:

  • M-TAB( complete-symbol) 根据加载的标签列表完成一个标识符。

  • M-.( find-tag) 转到定义点标识符的位置,如有必要,打开包含文件。

  • M-*( pop-tag-mark) 回到你之前的位置M-.

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

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


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

于 2010-08-06T20:49:08.267 回答
11

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

于 2010-08-07T22:06:41.840 回答
8

haskell-mode目前不提供这种可能性。为 CEDET 实现 haskell 解析器有一些工作 - 在这种情况下,用户将自动获得自动完成功能。但这项工作不久前才开始......

于 2010-08-06T19:00:10.377 回答
7

我的设置有点复杂。它使用自动完成基础设施,该基础设施自动显示候选者的下拉列表,类似于传统的 IDE。我下载了这个对所有关键字进行硬编码的脚本。除此之外,我使用ghc-mod生成模块名称。

于 2010-08-08T01:54:51.003 回答
6

作为一种“便宜又开朗”的自动补全机制,不要忽视M-/. 它完全是启发式的且与语言无关,但出奇地有效。

于 2012-07-21T00:22:58.703 回答
2

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

于 2014-11-16T19:33:12.770 回答