首先,您将需要学习使用emacs进行操作的基本文本。由于emacs非常复杂,因此发现如何简单地选择文本和复制可能是一个挑战。因此,花一些时间来找出如何有效地做到这一点。阅读手册可能会有所帮助。对于Mac OS X,请使用Aquamacs,它支持本机快捷方式。
使用ESS与使用R并无不同。组织代码的相同规则也应适用。就我而言,每个项目都有其自己的目录,该目录位于名为R的父目录中,该目录位于我的主目录中(对于Windows,我建议将emacs主目录指向所有源代码所在的目录)。因此,当我使用ESS处理项目时,我总是会M-x R
选择项目目录的开始目录。
启动R进程后,我通常将emacs划分为两个窗口(emacs术语)。然后在左侧有一个源代码,并将其发送到右侧的R进程。相关的快捷方式(这些是emacs快捷方式)C-x 3
用于垂直分割窗口,C-x 1
使当前缓冲区成为唯一窗口以及C-x 2
水平分割窗口。
在向R发送代码时,我会区分函数和R语句。为此,我将所有功能保存在一个通常称为的文件中10code.R
。然后,我可以使用load ESS file选项(快捷方式C-c C-l
)简单地加载此文件。这种方法的优点是它可以获取所有功能,并且在R缓冲区中不产生任何内容。如果代码中有错误,则ESS在迷你缓冲区中显示一条消息,您可以按C-c
` 进行调查。
另一个代码是R语句,我尝试保持不言自明:加载数据,清除数据,拟合统计模型,检查结果并产生最终结果。这些语句的源代码是项目的当前状态。目的是在项目完成之后,使用此代码来采购文件,再生成项目(我也使用git来跟踪历史记录)。使用此文件时,我通常仅使用一个R语句,该语句通过eval函数,段落,语句命令(其快捷方式为)发送到R进程C-c C-c
。该命令将段落(即由新行分隔的文本)发送给R处理。这很方便,因为您可以将R语句分组为任务,然后将整个任务发送给R进程。它还不需要选择文本,这也非常方便。捷径C-c C-c
具有将光标移动到R窗口的优点,因此您可以立即检查发送的R语句的结果。
所以我的基本工作流程是在窗口和缓冲区之间移动很多。为方便起见,我在.emacs文件中使用以下快捷方式:
(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)
我很少使用f1
,但其他所有人都很频繁。我使用的其他特定的ESS设置如下:
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
这告诉ESS将选项卡的宽度设置为4个字符(默认为2个字符),这是我的个人喜好,并扩展了ESS保存为历史记录的已发出命令的数量。
对于直接使用R进程,我发现以下快捷键非常有用:
(add-hook 'inferior-ess-mode-hook
'(lambda nil
(define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
)
)
这会从您的R语句历史记录中回忆起R语句,但是它试图将其与您的行中已有的匹配。因此,例如pl
在R进程中键入并按下\C-up
(即控件和向上箭头)将循环显示所有以开头的语句pl
,因此将调用所有plot(...
命令。
我与ESS一起使用的最终设置如下:
(setq ess-ask-about-transfile t)
这样,ESS总是询问使用R进程将文本保存在缓冲区中的位置。我通常会根据日期对这些文件进行编号,所以我总是有另一种方式来跟踪我到底在做什么。此选项的唯一警告是,由于某种原因,ESS在加载R后将R缓冲区设置为只读。使缓冲区可写的捷径是C-x C-q
。
因此,这些是我用于ESS的设置,我对它们感到满意,并且几年来我一直不需要添加任何东西。在向初学者介绍ESS时,我通常会对此进行概述。
我将以最后一个快捷方式结束,对于我来说,这是使用Emacs时最常用的快捷方式,尤其是使用ESS时,C-g
它会退出迷你缓冲区中的命令。在使用Emacs和ESS的所有这些年中,我仍然设法调用一些我不想要的Emacs命令,C-g
在这些情况下非常有用。