重新定义 Emacs 中的 ENTER 键

4

我不懂elisp,但是我正在尝试做以下类似的事情:

(add-hook
 'scala-mode-hook
 (lambda ()
   (define-key scala-mode-map (kbd "RET") (lambda ()
                                            (scala-newline)
                                            (scala-indent-line)))))

目标是每次我按下回车键时调用这两个函数。我该如何实现?

4个回答

8

我以多种方式进行这样的操作,将它们全部压缩在一起:

(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-mode-hook放入其中任何位置,它也会适用于您 :)

7
在你的define-key中的lambda后面需要一个(interactive)表单。 编辑: 明确一点,内部表单应如下所示:
(lambda ()
  (interactive)
  (scala-newline)
  (scala-indent-line))

2
在hook中,你可以使用local-set-key,例如:
(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)))

0
只需键入C-j,它将调用newline-and-indent命令并执行您要求的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接