Emacs方案评估最后一个sexp

Emacs方案评估最后一个sexp,emacs,mit-scheme,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-xc-e时,我使用的是江湖医生,并让MIT方案在一个缓冲区中运行。我没有计算最后一个s表达式,而是得到“您必须用run ilisp启动一个低级LISP”。但是如果我手动添加快捷方式:

我试图将这些添加到我的.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-xc-e时,我使用的是江湖医生,并让MIT方案在一个缓冲区中运行。我没有计算最后一个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)中获得此功能而不手动输入?

C-h f
local set key
本地设置键是
subr.el
中的一个交互式编译Lisp函数

(本地设置键命令)

…剪断

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

因此,当您向init文件添加
localset key
时,绑定是在 加载文件时使用的任何主要模式

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

  • 主模式的名称。
    • 从已加载主模式的缓冲区使用C-h vmajor模式
    • 让我们假设
      mit scm模式
    • -map
      附加到此项以获取密钥映射
  • 定义主模式的文件的名称。
    • 使用C-h fmit scm模式
    • 让我们假设
      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 )))
    
    到您的初始文件。

    C-h f
    local set key
    本地设置键是
    subr.el
    中的一个交互式编译Lisp函数

    (本地设置键命令)

    …剪断

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

    因此,当您向init文件添加
    localset key
    时,绑定是在 加载文件时使用的任何主要模式

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

  • 主模式的名称。
    • 从已加载主模式的缓冲区使用C-h vmajor模式
    • 让我们假设
      mit scm模式
    • -map
      附加到此项以获取密钥映射
  • 定义主模式的文件的名称。
    • 使用C-h fmit scm模式
    • 让我们假设
      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 )))
    

    这就是我在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)))))   
    

    我通过仔细研究得出了这个结论。

    基于上面的伟大答案,这就是我在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)))))   
    
    我是通过仔细研究才弄出来的