美文网首页
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