在Emacs中重新定义ENTER键
我不知道elisp,但我正在尝试做以下事情:在Emacs中重新定义ENTER键,emacs,scala,Emacs,Scala,我不知道elisp,但我正在尝试做以下事情: (add-hook 'scala-mode-hook (lambda () (define-key scala-mode-map (kbd "RET") (lambda () (scala-newline) (scala-indent-line))))) 目标是每次
(add-hook
'scala-mode-hook
(lambda ()
(define-key scala-mode-map (kbd "RET") (lambda ()
(scala-newline)
(scala-indent-line)))))
目标是每次我按ENTER键时调用这两个函数。我实际上是如何做到这一点的?例如,在hook中,您可以使用本地设置键
(add-hook 'scala-mode-hook
(lambda ()
(local-set-key [return]
(lambda ()
(scala-newline)
(scala-indent-line)))))
尽管如此,也许使用标准换行符和缩进之类的东西会更容易些
(add-hook 'scala-mode-hook
(lambda ()
(local-set-key [return] 'newline-and-indent)))
在定义键中的lambda
后面需要一个(交互式)
表单
编辑:
为了清楚起见,内部形式应该如下所示:
(lambda ()
(interactive)
(scala-newline)
(scala-indent-line))
我基本上是在很多模式下这样做的,我把它们都压在了一起:
(mapcar (lambda (hooksym)
(add-hook hooksym
(lambda ()
(local-set-key (kbd "C-m") 'newline-and-indent)
)))
'(
clojure-mode-hook
emacs-lisp-mode-hook
erlang-mode-hook
java-mode-hook
js-mode-hook
lisp-interaction-mode-hook
lisp-mode-hook
makefile-mode-hook
nxml-mode-hook
python-mode-hook
ruby-mode-hook
scheme-mode-hook
sh-mode-hook
))
只需将scala模式挂钩
粘贴到某个地方,它也会为您工作:)只需键入C-j,它将调用换行和缩进
命令,并完全按照您的要求执行