在 emacs 中将相同的区域重新发送到 R shell

resend same region to R shell in emacs

我正在ESS 模式下使用emacs。很多时候我发现自己多次执行相同的源代码区域,所以我需要 select 该区域然后使用 "send region" 绑定。使用鼠标或键盘反复选择同一区域是我想消除的瓶颈。有没有办法重新发送上次发送的区域?

ESS 捆绑了一堆 eval 命令,请检查 ess-inf 以了解所有选项。我没有看到用于重新发送通过 ess-eval-region 发送的区域的功能,但添加该功能应该不会太难。

例如,您可以通过挂钩该函数并创建一些局部变量来缓存先前调用 ess-eval-region 使用的 start/end 位置。然后,只需使用缓存值调用 ess-eval-region

;; cache region start and end position when `ess-eval-region' is called
(defadvice ess-eval-region (before ess-cache-region activate)
  (setq-local ess--last-region-beg (ad-get-arg 0))
  (setq-local ess--last-region-end (ad-get-arg 1)))

(defun ess-eval-last-region (toggle)
  "Resend last region sent by `ess-eval-region'"
  (interactive "P")
  (when (bound-and-true-p ess--last-region-end)
    (ess-eval-region ess--last-region-beg
                     ess--last-region-end toggle)))