2

ESS-Emacsを使用してRスクリプトを編集しています。

Rスクリプトをロードするときは常に、その後に次のコマンドが続きます。

  1. Cx 3(私はこの分割が好きです)
  2. Mx R(Rを開く)

ターミナルで入力するたびに、手順1と2を自動化する方法はありますか。

emacs misc_r_file.r

明確にするために、すでにemacsでRスクリプトを開いている場合は、1または2は必要ありません。ステップ1と2は、新しいemacsプロセスを開いたときにのみ実行する必要があります。

よろしくお願いします。

4

2 に答える 2

1

これを行う方法はありますか?もちろん、それは単なるプログラミングです。

(defvar r-file-loaded-p nil
   "non-nil if an R file has been opened")

(defun maybe-setup-r ()
   (when (not r-file-loaded-p)
       (split-window-horizontally)
       (R)
       (setf r-file-loaded-p t)))

(add-hook 'r-mode-hook #'maybe-setup-r)

でも、Emacsセッションを続けてみませんか?

于 2010-09-22T11:11:44.337 に答える
1

あなたはFelipeCsaszarによるこのコードに興味があるかもしれません。これはShift-Enterを使用してRファイルのロード時に必要なことを実行し、さらにロードされた後はもう少し行います(Rが実行されていてリージョンが強調表示されている場合、Shift-Enterはリージョンを送信します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では、水平/垂直分割は、分割線が「移動する方向」を参照して、それを理解している人(私を含む)の数から逆になっていることを常に忘れています"分割線自体の方向ではなく、から。

于 2010-09-22T19:52:06.483 に答える