繁体   English   中英

在Emacs中重新定义ENTER键

[英]Redefining ENTER key in Emacs

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

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

目标是每次按ENTER键时调用这两个函数。 我该怎么做呢?

我在很多模式中基本上都是这样做的,所以我把它们压在一起:

(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 ,它也适合你:)

您需要在define-keylambda之后使用(interactive)表单。

编辑:

要清楚,内部形式应如下所示:

(lambda ()
  (interactive)
  (scala-newline)
  (scala-indent-line))

例如,在挂钩中,您可以使用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)))

只需输入Cj,它就会调用newline-and-indent命令并完全按照你的要求执行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM