我最近在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))
然而,这些方法都没有奏效。
我的问题是:在新版本中禁用此键绑定是否有原因?即我应该使用其他替代它的功能吗?如果没有,再次启用此键绑定的最佳方法是什么?
答案 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
。你可以考虑保持这样。