ess-execute键绑定不适用于新的ESS版本

时间:2013-09-30 23:51:14

标签: r emacs key-bindings ess

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

我的旧工作流程是使用C-c C-t(默认键绑定)通过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))

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

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

1 个答案:

答案 0 :(得分:1)

大约一年前,ESS钥匙被改造了。 C-c C-t 现在绑定到 dev-map提供了一些您可能想要的有用功能 在将来使用。所以最好不要禁用它。你的代码应该有效。你可能 从*R*缓冲区尝试 C-c C-t ,但那个是inferior-ess-mode,不是 ess-mode

你最好在ess-exta-map中定义你的密钥,这样它就可以同时工作 ess-mode和inferior-ess-mode。像这样:

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

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

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

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

顺便说一句 C-RET ess-eval-region-or-line-and-step。你可以考虑保持这样。