将TAB设置为Emacs Haskell模式下自动完成的快捷方式

时间:2014-09-06 07:36:57

标签: haskell emacs autocomplete

当我在Emacs中使用Haskell REPL(GHCI)(使用 C-c C-b 调用)时,我想使用 TAB 自动完成事情。 M - / 对我来说已经足够了,但是我不知道将 TAB 绑定到它的这个函数的名称( TAB 适用于制表(惊讶?)在交互模式下,我发现它完全没用。)

我希望这些更改仅应用于交互模式,而不是一般编辑,当 TAB 用于缩进时(可能还有其他事情,我还没有完全理解所有内容)。

2 个答案:

答案 0 :(得分:1)

扩展@chi的评论,你可以使用C-h k M-/找到Lisp函数的名称,它提供hippie-expand函数。

要在TAB交互模式下绑定ghci,请使用以下elisp代码:

(define-key haskell-interactive-mode-map (kbd "TAB") 'hippie-expand)

或者如果你想在正常的haskell-mode中绑定它,那么:

(define-key haskell-mode-map (kbd "TAB") 'hippie-expand)

答案 1 :(得分:0)

好的,使用great comment by chi,我发现绑定到 M - / 的函数的名称是dabbrev-expand(通过 Ch k M - / )。

现在我们需要Haskell REPL主要模式的名称,我发现我们可以用 C-h v major-mode 来获取它,它实际上是inferior-haskell-mode

然后,我猜有inferior-haskell-mode-hook,我们可以用它来调整创建REPL帧时的内容。

要添加本地快捷方式绑定,应使用define-key。参数keymap的值可以通过current-local-map获得。

了解这些事实,我们可以写:

(add-hook 'inferior-haskell-mode-hook
          (lambda ()
            (define-key (current-local-map) (kbd "<tab>") 'dabbrev-expand)))

据我所知,它可以完美地运行,现在TAB可以在REPL模式下自动完成,也可以在其他模式下进行缩进。