设置TAB作为快捷方式在Emacs Haskell的模式
自动完成我想用TAB自动完成的事情,当我使用的Haskell REPL(GHCI)在Emacs(与C-C C-B调用)。 M-/对我来说已经够用了,但是我不知道这个函数的名字绑定TAB它(TAB在交互模式下用于制表(惊讶?),我发现它完全无用)。设置TAB作为快捷方式在Emacs Haskell的模式
我希望这些更改仅适用于交互模式,而不是一般性编辑,当TAB适用于缩进(可能还有其他事情,我还没有完全理解所有内容)。
扩展@ chi的评论,您可以使用C-h k M-/
找到Lisp函数的名称,该函数给出hippie-expand
函数。
要ghci
交互模式结合TAB
,使用下面的elisp代码:
(define-key haskell-interactive-mode-map (kbd "TAB") 'hippie-expand)
或者,如果你想将它绑定在正常haskell-mode
则:
(define-key haskell-mode-map (kbd "TAB") 'hippie-expand)
它不起作用,Emacs说:'作为变量的符号值是void:haskell-interactive-mode-map'。 – Mark 2014-09-06 08:49:57
另外,如果没有'',通常不能使用'(kbd“TAB”)''。 – Mark 2014-09-06 08:52:00
@Mark它适合我。你的方法和我的区别似乎是使用的模式:你正在使用'inferior-haskell-mode'来进行'ghci'集成,而我正在使用[Interactive-mode](https://github.com/haskell/)哈斯克尔模/维基/哈斯克尔交互式模式)。区别在于交互模式支持更多功能,如cabal sandbox repl等。 – Sibi 2014-09-06 08:57:00
行,使用great comment by chi,我发现势必M-/的函数名是dabbrev-expand
(经由C-HķM-/)。
现在我们需要Haskell REPL主要模式的名称,我发现我们可以用C-h v主模式,它实际上是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模式自动完成,并在其他缩进。
IIRC,'章ķM- /'应该告诉你绑定到'M- /'的Lisp函数的名字。在发现该名称后,当您处于交互模式时,必须将“TAB”绑定到它。尽管如此,我在elisp方面还不够流畅。 – chi 2014-09-06 08:04:12