Emacs ESS Mode - 为注释区域添加制表符

57

我正在使用Emacs的ESS模式。当编辑R代码时,任何注释行(以#开头的行)在我创建位于其上方的新行时自动缩进到最右侧。我应该如何更改我的.emacs.el文件来解决这个问题?

例如,我有:

# Comment

现在,我将光标放在该行的开头,然后按下 Enter 键,我得到:

                                # Comment

谢谢任何提示。

4个回答

70

如果您不希望评论缩进,请使用'###'。根据手册,默认情况下以'###'开头的注释将对齐到行的开头。以'##'开头的注释将对齐到包含注释的块的当前缩进级别。最后,以'#'开头的注释将对齐到右侧的列(默认为第40列,但此值由变量comment-column控制),或者如果该行表达式扩展超出缩进列,则对齐到包含注释的行表达式之后。


2
我很高兴在询问同样的问题之前先查看了一下。我标记了这个答案,因为我认为它比上面的答案更好。我一直认为这是 ESS 模式的一个错误/问题,但在调整语法后,我的问题都解决了。 - Choens
5
如果你不经常使用Emacs,这个惯例可能会看起来有些奇怪。然而,这个惯例来自于lisp和emacs-lisp语言中的注释规则,其中分号的数量表示注释类型,因此决定了它应该如何缩进。 - Stephen Eglen

34

要么

(setq ess-fancy-comments nil)

如果您从不想缩进单行#注释或

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

如果您想更改 Enter 键的行为,以便它不会缩进。


4
我认为你应该使用"#"来表示行末注释,并且这些注释被精心缩进到相同的列中,以便于漂亮的代码"列表"。 对于其他注释,请确实养成使用"##"的习惯(比起"###"要更多):它们与该代码块内的其他“语句”相同缩进。 - Martin Mächler
2
我仍然倾向于决定我应该使用多少个#。一般来说,一个就足够了,所以非常感谢这个答案,因为我的评论没有被移动到我不想要的位置... - user989762

5

ess-indent-with-fancy-comments 设置为 nil 将删除奇怪的单个 # 缩进,但必须在 ESS 加载之前设置它,可以在 hook 中 buffer-locally 设置(如 Rob 的答案中所示),或者全局设置。

(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 后,钩子方法不再适用于我。在 require ess 之前使用 setq 可以解决问题。 - Yin Zhu

3

是的,我也不得不这样做才能使其工作,否则它会在本地被覆盖。 - Palace Chan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接