美文网首页
ESS的配置笔记

ESS的配置笔记

作者: p1uxtar | 来源:发表于2019-07-17 18:37 被阅读0次

2019-11-19 update:

我已经把ESS相关的配置独立了出来:+ESS.el

相较原来的正文,新增的特性包括且不限于:

  1. 提示符(comint)设为只读;
  2. Rscript中用Tab补全,打开Rscript文件且inferior未运行时,自动加载一个进程,与之配合。的功能与org-mode冲突,默认已经删除
  3. 使用RStudio-缩进风格;
  4. 使用formatR(可绑定函数)优化R代码格式;
  5. 高亮部分关键字。
---- 我是正文分割线 ----

这两天正苦于RStudio的快捷键不好用。本想去跟个楼催一下官方填坑,挖出来一个、一看是2015年的老坟,算了……

昨晚正好看见关于Spacemacs中如何使用ESS的帖子,跟网友oracleyue讨论后,决定深入 学(zhe)习(teng) 一下,做一记录:

1. 首先是Emacs的安装

不多说,Vim党可以自行退散了……

2. ESS的安装

我使用了melpa的安装方式,具体可参考melpa,在包列表里添加ess。想同时使用polymode的话,须同时添加poly-markdown poly-R

Doom和Spacemacs的安装方式同时有效:

Doom

为例,在init.el中去掉ess行的注释,
或在packages.el文件中

(package! ess)

即可。

Spacemacs

的配置,在dotspacemacs-configuration-layers里加上:

(ess :variables
     ess-assign-key "M--")

就能用ESS的layer了。

PS: ESS全家桶在https://github.com/emacs-ess/ESS

3. 配置

这就可以开始使用了,我也是偶然发现<C-return>可以像RStudio一样运行当前行,在ESS中script与console也是可以交互的(之前鄙了,严重低估了ESS,仅当作高亮插件用);如果没启动inferior-ess-r,可以在选择询问的默认路径后自动启动。

列几个常用的快捷键:

按键 命令
C-c C-b 执行当前buffer
C-c C-c 执行当前区域或函数
C-c C-j (<C-return>) 执行当前行
C-c C-r 执行当前区域
C-c C-q 退出

设置参数:

(use-package ess-site
  :ensure ess
  :init
  (setq comint-prompt-read-only t          #提示符设为只读
        ess-startup-directory "~/R"        #设置默认启动路径
        ess-ask-for-ess-directory nil      #不询问路径启动R
        ess-history-file "~/R/.history"    #历史记录保存位置
        ;; ess-indent-level 2              #默认缩进
        ess-set-style 'RStudio-            #使用RStudio-风格缩进
        ess-tab-complete-in-script t)      #在script中按tab补全
  ;; (autoload 'ess-r-mode "ess-site.el" nil t)
  :commands R
  :bind
  (("C-S-f" . #'Hesperus-ess-indent-region-with-formatR) #使用formatR调整代码格式,函数在+ESS.el
   ("C-S-r" . 'run-ess-r)
   ("C-c m r" . 'R-mode)
   :map comint-mode-map
   ("C-c e" . 'ess-rdired)                  #显示当前观测值
  :hook
  ((ess-mode . company-mode))
  :config
  ;; company with tabnine & R               #同时使用company和tabnine补全
  (setq ess-r-company-backends
    '((company-tabnine company-R-library company-R-args company-R-objects :separate))))

但是此时(在Doom中)按M--是出不了<-符号的,可以绑定宏或安装ess-smart-underscore包并绑定函数,不过这个包有点老我没有仔细折腾;我安装了ess-smart-equals

这是作者推荐的配置:

(use-package ess-smart-equals
  :init   (setq ess-smart-equals-extra-ops '(brace paren percent))
  :after  (:any ess-r-mode inferior-ess-r-mode ess-r-transcript-mode)
  :config (ess-smart-equals-activate))

但是似乎按啥都出不了管道命令,我查了源码发现有这个符号,原来需要按不同次数才能输出不同的运算符,我试了几个:

按键 次数 得到运算符
= 1 <-
= 2 <<-
= 3 =
= 4 ==
= 5 ->
= 6 ->>
= 7 %<>%
% 1 %*%
% 2 %%
% 3 %/%
% 4 %in%
% 5 %>%
% 6 %<>%
% 7 %o%
% 8 %x%

按完一轮,从头开始循环。想像RStudio一样用C-S-m输入%>%的话,可以自行开发用法,我只能用这样的笨办法,一个宏达到连输5次的效果:

后来发现在 :config 里defcustom ess-smart-equals-contexts,也是可以实现的,具体的配置同样在本文最上方的链接,正文不再赘述了。

(fset 'Hesperus-insert-smart-pipe
      (lambda (&optional arg) "Keyboard macro."
        (interactive "p")
        (kmacro-exec-ring-item (quote ("%%%%%" 0 "%d")) arg)))

(def-package! ess
  :bind
  (("C-S-m" . #'Hesperus-insert-smart-pipe)))

啥?M--还是不出<-?按一下=试试?这不比组合键方便,还要啥自行车?

实在想要就自己绑定函数(宏)吧。

4. Environment

在Global Environment里显示 obs. 和 variables. 的数目应该是ESS替代不了RStudio的功能了,不过感谢shuguang79提示可以用ess-rdired勉强应付,能同时显示4列信息,分别是name、class、length、size,只是不能实时刷新。默认的快捷键是C-c C-. o

欢迎大家补充更多ESS的用法!

相关文章

网友评论

      本文标题:ESS的配置笔记

      本文链接:https://www.haomeiwen.com/subject/dkmclctx.html