Emacs ESS 模式 - 用于评论区域的选项卡

Posted

技术标签:

【中文标题】Emacs ESS 模式 - 用于评论区域的选项卡【英文标题】:Emacs ESS Mode - Tabbing for Comment Region 【发布时间】:2010-10-21 07:34:27 【问题描述】:

我正在为 Emacs 使用 Emacs-Speaks-Statistics (ESS) 模式。编辑 R 代码时,当我在其上方创建新行时,任何注释行(以 # 开头的注释行)都会自动在最右边添加标签。我应该如何更改我的 .emacs.el 文件来解决这个问题?

例如,我有:

# Comment

现在,将光标放在行首并按 Enter 后,我得到:

                                # Comment

感谢任何提示。

【问题讨论】:

【参考方案1】:

ess-indent-with-fancy-comments 设置为nil 将删除奇怪的单# 缩进,但必须在挂钩中本地缓冲区设置(如Rob 的回答),或者在加载ESS 之前:

(setq ess-indent-with-fancy-comments nil)
(require 'ess)

在加载 ESS 之前确保设置它的其他方法是在 M-x configure 中设置它,或者在 use-package:init 部分中设置它。

发生的事情是 ESS 在 ess-style-alist 初始化时定义样式,然后在每个缓冲区中应用默认样式。因此,为了确保这些样式尊重ess-indent-with-fancy-comment,您必须确保在定义样式之前对其进行设置。

【讨论】:

升级到 ESS 18.10.3 后,挂钩方法不再适用于我。 setqrequire ess 工作之前。【参考方案2】:

Jouni 的回答对我不起作用。但我在这里找到了一种方法: https://stat.ethz.ch/pipermail/ess-help/2016-May/010970.html

   (defun my-ess-settings ()
     (setq ess-indent-with-fancy-comments nil))
   (add-hook 'ess-mode-hook #'my-ess-settings)

【讨论】:

是的,我也必须这样做才能让它工作,否则它会在本地被覆盖。【参考方案3】:

如果您不希望 cmets 缩进,请使用“###”。根据manual,

默认情况下,cmets 以 ‘###’ 与开头对齐 线。以‘##’开头的评论 与当前水平对齐 包含块的缩进 评论。最后,cmets 以“#”开头的对齐到 右侧的列(第 40 列 默认情况下,但此值为 由变量控制 评论栏,)或就在 包含 如果超出范围,请发表评论 缩进列。

【讨论】:

我很高兴在问这个完全相同的问题之前看过。我标记了这个答案,因为我认为它确实是比上面的答案更好的解决方案。我一直认为这是 ESS 模式的错误/问题,但在调整语法后,我的问题都消失了。 如果你不经常使用 Emacs,这个约定可能看起来很奇怪。然而,这个约定来自 lisp 和 emacs-lisp,其中分号的数量表示注释的类型,因此应该如何缩进。【参考方案4】:

要么

(setq ess-fancy-comments nil)

如果你不想缩进单个-# cmets,或者

(add-hook 'ess-mode-hook 
          (lambda () 
            (local-set-key (kbd "RET") 'newline)))

如果你想改变 Enter 的行为使其不缩进。

【讨论】:

我认为您应该使用“#”作为行尾 cmets,并且这些都很好地缩进到同一列 -> 不错的代码“列表”。对于其他 cmets,确实养成了使用“##”(比“###”更多)的习惯:这些缩进作为该代码块中的其他“语句” 我仍然赞成决定我应该使用多少#s。一个通常就足够了,因此非常感谢这个答案,因为我的评论没有移动到我不希望它出现的位置......

以上是关于Emacs ESS 模式 - 用于评论区域的选项卡的主要内容,如果未能解决你的问题,请参考以下文章

Emacs 全局配置选项卡

让 Emacs 填充段落与类似 javadoc 的注释配合得很好

Emacs 和 ESS:使用正确版本的 R

Emacs和ESS的使用技巧。

emacs 选项卡宽度与自动完成冲突

用于 R 项目/包开发的 ESS 工作流