1

我试图将这些添加到我的 .emacs 中,但它们似乎没有效果

(local-set-key (kbd "C-x C-e") 'scheme-send-last-sexp )
(local-set-key (kbd "C-M-x") 'scheme-send-definition )

当我在 .scm 缓冲区中尝试 Cx Ce 时,我正在使用 quack 并让 MIT-Scheme 在一个缓冲区中运行。我没有评估最后一个 s 表达式,而是得到“您必须使用 run-ilisp 启动一个劣质 LISP。” 但是,如果我手动添加快捷方式:

M-x local-set-key RET C-x C-e scheme-send-last-sexp RET
M-x local-set-key RET C-M-x scheme-send-definition RET

有用。如何在不手动输入的情况下在 Emacs (23.3.1) 中获得此功能?

4

2 回答 2

5

C-h f local-set-key

local-set-key 是一个交互式编译的 Lisp 函数subr.el

(local-set-key KEY COMMAND)

……剪……

绑定进入当前缓冲区的本地映射,在大多数情况下,该映射与同一主要模式下的所有其他缓冲区共享。

因此,当您添加local-set-key到您的初始化文件时,绑定是在该文件加载时使用的任何主要模式下进行的。

您需要将其添加到一种特定的主要模式。为此,您需要两条信息:

  1. 主要模式的名称。
    • C-h vmajor-mode从已加载主模式的缓冲区中使用。
    • 让我们假设mit-scm-mode
    • 附加-map到此以获取键盘映射。
  2. 定义主要模式的文件的名称。
    • 使用C-h fmit-scm-mode.
    • 让我们假设mit-scm-mode.el
    • 使用不带扩展名的文件名。

有了这些,您将添加:

(eval-after-load "mit-scm-mode"
  '(progn
     (define-key mit-scm-mode-map (kbd "C-x C-e") 'scheme-send-last-sexp )
     (define-key mit-scm-mode-map (kbd "C-M-x") 'scheme-send-definition )))

到你的初始化文件。

于 2012-05-05T23:47:01.933 回答
0

基于上面的好答案,这就是我在 Debian 10 buster 上使用 Emacs 26.1 所做的事情。

(eval-after-load "scheme"                                                                                                                         
  '(progn                                                                                                                                         
     (load "cmuscheme")                                                                                                                           
     (define-key scheme-mode-map (kbd "C-x C-e") (lambda () (interactive) (scheme-send-last-sexp)))                                               
     (define-key scheme-mode-map (kbd "C-M-x") (lambda () (interactive) (scheme-send-definition)))))   

我从这个问题和一些挖掘中解决了这个问题。

于 2020-05-26T03:25:04.087 回答