1

我最近在http://vgoulet.act.ulaval.ca/en/emacs/上使用 Vincent Goulet 的 Windows 7 安装程序从 R 2.15 和旧版本的 ESS 升级。这包括 ESS 版本 13.09。我也刚刚安装了 R 版本 3.0.2。

我的旧工作流程是使用 Cc Ct(默认键绑定)通过运行命令ess-execute并将结果发送到临时缓冲区。我发现这对我的工作流程和 R 编程风格非常有用。

但是,在新版本中,此键绑定已被删除。我四处搜索,找不到有关此主题的任何其他线程。我查看了 ess-mode.el 并找到了这一行:

;; (define-key map "\C-c\C-t"   'ess-execute-in-tb)

哪个被注释掉了。我看到他们添加了不错的功能ess-describe-object-at-point,但不允许执行命令。

我不是 emacs 高级用户,所以我倾向于将 lisp 片段复制到我的 .emacs 中并对它们进行小幅编辑。我尝试(1)取消注释上面的行和(2)在我的 .emacs 文件中定义一个新的键绑定,与 ESSShift Enter (http://www.emacswiki.org/emacs/ESSShiftEnter)中的新键绑定相同。

(add-hook 'ess-mode-hook
   (lambda()
     (local-set-key [(shift return)] 'my-ess-eval)
     ;; added Ctrl-Enter to stay on same line
     (local-set-key [C-return] 'ess-eval-line)
     ;; Newest version of ESS got rid of C-c C-t for ess-execute add back
     (local-set-key "\C-c\C-t" 'ess-execute-in-tb))

然而,这两种方法都没有奏效。

我的问题是:在新版本中禁用此键绑定是否有原因?即我应该使用一些其他功能来取代它吗?如果没有,再次启用此键绑定的最佳方法是什么?

4

1 回答 1

1

ESS 密钥在一年前左右进行了改造。C-c C-t现在绑定到 dev-map ,它提供了许多您将来可能想要使用的有用功能。所以最好不要禁用它。您的代码应该可以工作。C-c C-t您可能从缓冲区尝试过*R*,但那个是inferior-ess-mode,不是 ess-mode.

你最好在 ess-exta-map 中定义你的键,这样它就可以在 ess-mode 和 lower-ess-mode 下工作。像这样的东西:

(eval-after-load "ess-mode"
  '(progn
     (define-key ess-extra-map "\C-e" 'ess-execute-in-tb)))

痛苦eval-after-load是必要的,因为文森特的发行版在加载用户初始化文件后加载 ess。如果您加载 ESS,(load "ess-site")那么您可以将(define-key ...)部分留在 .emacs.el 中。

现在C-c C-e C-e应该执行你的命令。

我正在将这个确切的密钥添加到 ESS 开发版本中。因此,在下一个版本中,您可以删除上述代码。谢谢你弹出这个。

顺便说一句 C-RET 是必然的 ess-eval-region-or-line-and-step。你可以考虑保持这种状态。

于 2013-10-01T02:17:06.370 回答