当我在Emacs中使用Haskell REPL(GHCI)(使用 C-c C-b 调用)时,我想使用 TAB 自动完成事情。 M - / 对我来说已经足够了,但是我不知道将 TAB 绑定到它的这个函数的名称( TAB 适用于制表(惊讶?)在交互模式下,我发现它完全没用。)
我希望这些更改仅应用于交互模式,而不是一般编辑,当 TAB 用于缩进时(可能还有其他事情,我还没有完全理解所有内容)。
答案 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模式下自动完成,也可以在其他模式下进行缩进。