Emacs Scheme评估-last-sexp

时间:2012-05-05 22:54:03

标签: emacs mit-scheme

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

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

当我在.scm缓冲区中尝试使用C-x C-e时,我正在使用嘎嘎并且在一个缓冲区中运行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)中获得此功能?

2 个答案:

答案 0 :(得分:5)

C-h f local-set-key

  

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

     

(local-set-key KEY COMMAND)

     

...略...

     

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

因此,当您将local-set-key添加到init文件时,将进行绑定 在该文件加载时使用的主要模式。

您需要将其添加到一个特定的主要模式。要做到这一点,你需要两件 信息:

  1. 主要模式的名称。
    • 从已加载主模式的缓冲区中使用 C-h v major-mode
    • 让我们假设mit-scm-mode
    • -map附加到此处以获取密钥图。
  2. 定义主模式的文件的名称。
    • 使用 C-h f mit-scm-mode
    • 让我们假设mit-scm-mode.el
    • 使用没有扩展名的文件名。
  3. 有了这些,你可以添加:

    (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 )))
    

    到您的初始文件。

答案 1 :(得分: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)))))   

我从this question算起,并进行了一些挖掘。