您可能对FelipeCsaszar的这段代码感兴趣,它使用 Shift-Enter 在加载 R 文件时执行您想要的操作,并且在加载后执行更多操作(如果 R 正在运行并且突出显示某个区域,则 shift-enter 发送该区域转到要评估的 R。如果 R 正在运行并且没有突出显示任何区域,则 shift-enter 将当前行发送到 R。在 R 文件中反复按 shift-enter 会逐步执行每一行(将其发送到 R),跳过注释行。每次评估后,光标也会向下移动到 R 缓冲区的底部。)
;; Use shift-enter to split window & launch R (if not running), execute highlighted
;; region (if R running & area highlighted), or execute current line
;; (and move to next line, skipping comments). Nice.
;; See http://www.emacswiki.org/emacs/EmacsSpeaksStatistics,
;; FelipeCsaszar. Adapted to spilit vertically instead of
;; horizontally.
(setq ess-ask-for-ess-directory nil)
(setq ess-local-process-name "R")
(setq ansi-color-for-comint-mode 'filter)
(setq comint-scroll-to-bottom-on-input t)
(setq comint-scroll-to-bottom-on-output t)
(setq comint-move-point-for-output t)
(defun my-ess-start-R ()
(interactive)
(if (not (member "*R*" (mapcar (function buffer-name) (buffer-list))))
(progn
(delete-other-windows)
(setq w1 (selected-window))
(setq w1name (buffer-name))
(setq w2 (split-window w1 nil t))
(R)
(set-window-buffer w2 "*R*")
(set-window-buffer w1 w1name))))
(defun my-ess-eval ()
(interactive)
(my-ess-start-R)
(if (and transient-mark-mode mark-active)
(call-interactively 'ess-eval-region)
(call-interactively 'ess-eval-line-and-step)))
(add-hook 'ess-mode-hook
'(lambda()
(local-set-key [(shift return)] 'my-ess-eval)))
(add-hook 'inferior-ess-mode-hook
'(lambda()
(local-set-key [C-up] 'comint-previous-input)
(local-set-key [C-down] 'comint-next-input)))
(require 'ess-site)
在这段代码中完成的拆分是您想要的 Cx-3 --- 我总是忘记在 Emacs 中水平/垂直拆分与有多少人(包括我)理解它相反,指的是拆分线“移动的方向” " 从而不是分割线本身的方向。