自動完成我想用TAB自動完成的事情,當我使用的Haskell REPL(GHCI)在Emacs(與C-C C-B調用)。 M-/對我來說已經夠用了,但是我不知道這個函數的名字綁定TAB它(TAB在交互模式下用於製表(驚訝?),我發現它完全無用)。設置TAB作爲快捷方式在Emacs Haskell的模式
我希望這些更改僅適用於交互模式,而不是一般性編輯,當TAB適用於縮進(可能還有其他事情,我還沒有完全理解所有內容)。
自動完成我想用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