【问题标题】:How to define ESS key bindings correctly in Aquamacs?如何在 Aquamacs 中正确定义 ESS 键绑定?
【发布时间】:2013-05-07 17:06:07
【问题描述】:

我切换到 Mac,不得不放弃我最喜欢的 R 编辑器 (Notepad++)。现在我正在尝试学习 Emacs。学习曲线很陡峭,但是一旦我学会使用它,这似乎就像是 R 的 编辑器。我正在使用 OS X 10.8.3 和 Aquamacs 2.4

我正在尝试按照这些 SO 问题的出色提示设置自定义键绑定:1,2,3

如果我将此命令复制到preferences.el 文件中,Aquamacs 会毫无怨言地打开并且该命令有效:

(global-set-key [C-tab] 'other-window)

但是,如果我尝试设置以下选项之一:

(define-key ess-mode-map (kbd "C .") 'ess-eval-paragraph)
(define-key ess-mode-map [C-.] 'ess-eval-paragraph)
(define-key ess-mode-map "\C-." 'ess-eval-paragraph)

Aquamacs 打开并出现问题,但命令有效:

加载 `~/Library/Preferences/Aquamacs 时出错 Emacs/Preferences.el(或 .elc)':

Symbol 作为变量的值是 void:ess-mode-map

为确保正常运行,您应该调查并删除 初始化文件中的错误原因。使用以下命令启动 Emacs `--debug-init' 选项来查看完整的错误回溯。

我想使用 Ctrl + 。将 R 代码/缓冲区的段落运行到 R。显然我做错了什么。由于我是 Mac 和 Emacs 的完全新手,这让我感到不知所措。发生了什么,如何解决这个问题?

【问题讨论】:

    标签: macos r emacs


    【解决方案1】:

    您不能在 ess-mode-map 存在之前对其进行修改。在加载 ess(特别是 ess-mode)之前它不存在。所以像下面这样的东西应该可以工作:

    (eval-after-load "ess-mode"
      '(define-key ess-mode-map (kbd "C-.") 'ess-eval-paragraph))
    

    编辑:请注意 C-. 不在 ascii 字符集中,因此 "\C-." 字符串不起作用。您必须改用(kbd "C-.") 表单。该字符串适用于其他组合,例如"\C-a"(不是说您应该将其绑定到C-a)。有关详细信息,请参阅the manual

    【讨论】:

    • 感谢您的回答。使用这段代码,它会抱怨:“错误:字符串中的修饰符无效”。也许代码不完全正确?
    • 嗯。这很奇怪。如果我将键绑定定义为 [C-.] 或 (kbd "C ."),程序会正常启动而不会报错,但未定义键盘快捷键。
    • 以下作品:(eval-after-load "ess-mode" '(define-key ess-mode-map (kbd "C-.") 'ess-eval-paragraph))。我不知道为什么其他关键绑定意见不起作用。也许我在某个地方做错了什么,或者可能是因为我的挪威语键盘。请你更新这个替代你的答案吗?我会将其标记为已接受。
    • 我弄清楚了为什么我的第一个答案不起作用并添加了上面的解释。
    • 假设我想要相同的键绑定,但使用不同的命令,用于 .tex 和 .rnw 文件。使用仍然正确:eval-after-load 还是应该在缓冲区模式/文件更改时使用挂钩来更改命令?
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多