首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使Emacs ESS遵循R风格指南

使Emacs ESS遵循R风格指南
EN

Stack Overflow用户
提问于 2011-09-21 15:35:04
回答 5查看 4.5K关注 0票数 19

我已经使用Emacs/ESS很长一段时间了,我熟悉哈德利的R风格建议。我想在ESS中遵循这些惯例,比如操作符周围的漂亮空格,逗号后面的空格,if语句之后的空格,大括号之前的空格等等。

有没有人费心去遵循这个风格的指南呢?IMHO,官方风格的建议是相当温和的,他们什么也不提风格。谷歌R风格指南与我在JavaScript中编写代码时使用的那些非常相似,所以它是不-不的。

长话短说:是否有任何具备(e)LISP技能的人愿意为ESS?实现(哈德利的)风格指南?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-25 14:30:25

Hadley指南的优点是围绕运算符(除了/)周围的空格。

有一个智能操作员包,它为几乎每个操作符实现它。

这是我的设置(要使用的不友好操作符):

代码语言:javascript
复制
(setq smart-operator-mode-map
  (let ((keymap (make-sparse-keymap)))
    (define-key keymap "=" 'smart-operator-self-insert-command)
    ;; (define-key keymap "<" 'smart-operator-<)
    ;; (define-key keymap ">" 'smart-operator->)
    ;; (define-key keymap "%" 'smart-operator-%)
    (define-key keymap "+" 'smart-operator-+)
    ;; (define-key keymap "-" 'smart-operator--)
    ;; (define-key keymap "*" 'smart-operator-*)
    ;; (define-key keymap "/" 'smart-operator-self-insert-command)
    (define-key keymap "&" 'smart-operator-&)
    (define-key keymap "|" 'smart-operator-self-insert-command)
    ;; (define-key keymap "!" 'smart-operator-self-insert-command)
    ;; (define-key keymap ":" 'smart-operator-:)
    ;; (define-key keymap "?" 'smart-operator-?)
    (define-key keymap "," 'smart-operator-,)
    ;; (define-key keymap "." 'smart-operator-.)
    keymap)
  "Keymap used my `smart-operator-mode'.")

还请参阅关于R样式这里的良好讨论。

编辑我也使用事实上的camelCase风格的R代码的全球。下划线--局部变量的分隔名称--很容易区分。

emacs中有一种特殊的subword模式,它重新定义了对大写子单词使用的所有编辑和导航命令。

代码语言:javascript
复制
(global-subword-mode)
票数 6
EN

Stack Overflow用户

发布于 2011-09-21 15:44:18

我不写Elisp,我不同意Hadley关于下划线的文体优点的看法。而且,哈德利仍然迷失在不使用OneTrueEditor的沙漠中,因此在这个问题上我们不能指望他提供任何帮助。

但是,如果您是开放的遵循R核心而不是哈德利,下面是R内部材料手册,第8节。"R编码标准“的建议。对我来说,R核心首先定义了R风格。谷歌和哈德利的风格是不错的次要建议。

不管怎么说,回到伊莉斯那。以下内容多年来一直为我们服务,我确实喜欢这样一个事实,即基本的R行为与Emacs C++风格相似,因为我碰巧在这两种模式下查看了代码。

..。 同样重要的是,代码的编写方式允许其他人理解它。这对于修复问题特别有帮助,包括使用自描述变量名称、注释代码以及正确格式化代码。R团队建议对R和C(也很可能也是Perl)代码使用基本缩进4,对于Rd格式的文档使用2。Emacs (21个或更高版本)用户可以通过将以下内容放入他们的启动文件中并使用自定义来设置c-default-style' to“bsd”和c-basic-offset' to4‘来实现这种缩进样式。 ESS (add‘ess-mode-钩子) (lambda () (ess-set-style 'C++’C++ ));ess-继续-语句-偏移2 2 8 5 4;ess或偶数;;(setq nuke-尾部-空格-p);Perl (add-钩子‘perl模式-钩子(lambda () (setq缩进级别4) ( Emacs‘C和R模式的“`GNU”样式使用基本缩进2,确定使用窄字体时结构显示不够清楚。)

我认为我唯一经常做的补充就是遵循最后的注释片段:

代码语言:javascript
复制
;; or even
(setq ess-nuke-trailing-whitespace-p t)

如果确实需要使用下划线编码,当然可以关闭下划线切换。

票数 29
EN

Stack Overflow用户

发布于 2014-08-09 13:26:39

使用ESS的开发版本(将于2015年9月发布),只需添加到您的ess-mode-hook中即可

代码语言:javascript
复制
(ess-set-style 'RStudio)

RStudio还有一个默认设置的“垂直对齐参数”复选框。如果要在未选中此设置(如Hadley的代码)时再现行为,则需要将ess-offset-arguments更改为prev-line

代码语言:javascript
复制
(setq ess-offset-arguments 'prev-line)

如果您发现https://github.com/emacs-ess/ESS和RStudio缩进之间存在重要的差异,请在RStudio上提交一个问题。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7502540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档