在Emacs中重新定义ENTER键

在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))))) 目标是每次

我不知道elisp,但我正在尝试做以下事情:

(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,它将调用
换行和缩进
命令,并完全按照您的要求执行