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

0xA*_*xAX 20 emacs haskell autocomplete haskell-mode

我安装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)
Run Code Online (Sandbox Code Playgroud)

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

Gil*_*il' 18

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

  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)类似,但直接完成到点之前的最近匹配.


dan*_*lei 11

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


Ale*_*Ott 8

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


Wei*_* Hu 7

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


Nor*_*sey 6

作为一种"廉价开朗"的自动完成机制,不要忽视M-/.它完全是启发式和语言无关的,但却非常有效.