向ESS/R用户征求有关在.emacs文件中使用elisp代码建议的提问标题。

8

我相信不是所有的R语言用户都了解elisp。如果ESS用户能在这里分享他们的.emacs文件中的代码,那将会很好。注释清晰的代码尤其有用。希望这能促进R语言用户使用ESS。

2个回答

7

对我来说,这个东西非常有用:

;; ESS: Emacs Speaks Statistics
(load "~/elisp/vendor/ess/lisp/ess-site.el") 

;; 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-prompt-read-only t)
  (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)

从此处获取:http://www.kieranhealy.org/blog/archives/2009/10/12/make-shift-enter-do-a-lot-in-ess/ 这篇文章主要介绍了在使用 ESS(Emacs Speaks Statistics)时,如何通过组合快捷键 "Shift" 和 "Enter" 实现一些实用的功能。例如:在 R 控制台中执行当前行、在 R 脚本中执行当前段等。这些技巧可以提高编码效率,值得一试。

1
我也使用了这个。这使得ESS[S]的行为更接近于Rgui.exe,可能会吸引新的ESS用户。 - ggg

4
在Debian / Ubuntu上,我使用ESS软件包,它不需要任何额外的.emacs条目,因为它使用来自/etc/emacs/site-start.d/50ess.el的系统范围设置。在Windows上,我必须设置路径到Rterm.exe,并像ESS手册建议的那样引用ess-site.el
但是我有这个……它几乎是从'R Extensions'手册中复制的:
;; edd 12 May 2006 from R-exts.texi
;;                 with one variation
;;; C
(add-hook 'c-mode-hook
          ;;(lambda () (c-set-style "bsd")))  
          (lambda () (c-set-style "c++"))) ; edd   
;;;; ESS 
(add-hook 'ess-mode-hook 
          (lambda ()
            (ess-set-style 'C++)  
            ;; Because
            ;;                                 DEF GNU BSD K&R C++
            ;; ess-indent-level                  2   2   8   5   4 
            ;; ess-continued-statement-offset    2   2   8   5   4  
            ;; ess-brace-offset                  0   0  -8  -5  -4 
            ;; ess-arg-function-offset           2   4   0   0   0
            ;; ess-expression-offset             4   2   8   5   4 
            ;; ess-else-offset                   0   0   0   0   0 
            ;; ess-close-brace-offset            0   0   0   0   0 
            (add-hook 'local-write-file-hooks  
                      (lambda ()    
                        (ess-nuke-trailing-whitespace)))))
;(setq ess-nuke-trailing-whitespace-p 'ask)    
;; or even 
(setq ess-nuke-trailing-whitespace-p t)   

有趣。每次启动ESS时,您是否手动设置它?例如,拆分窗口并启动R。我觉得这相当麻烦。我使用了http://www.kieranhealy.org/blog/archives/2009/10/12/make-shift-enter-do-a-lot-in-ess/上的代码来自动化这个过程。 - ggg
2
您可以在John Fox的网站http://socserv.mcmaster.ca/jfox/Books/Companion/ESS/上找到一个良好的配置文件,它可以自动设置所有内容。它是为Xemacs设计的,但对于Emacs也可以正常工作(可能需要进行少量修改)。 - Calimo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接