【问题标题】:Haskell autocompletion in Emacs using haskell-mode使用 Haskell 模式在 Emacs 中自动完成 Haskell
【发布时间】:2011-03-26 09:06:03
【问题描述】:

我在 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模式就没有这种可能?

【问题讨论】:

    标签: haskell emacs autocomplete haskell-mode


    【解决方案1】:

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

    【讨论】:

    • 您知道 Haskell 的 CEDET 工作进展如何吗?
    【解决方案2】:

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

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

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

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

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

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

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

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

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


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-10-31
              • 1970-01-01
              • 2011-07-05
              • 2012-02-06
              • 2012-07-27
              • 2011-12-19
              • 2012-04-18
              • 1970-01-01
              相关资源
              最近更新 更多