Emacs ESS模式 - 评论区域的标签

Chr*_*ois 49 emacs r ess

我正在为Emacs使用Emacs-Speaks-Statistics(ESS)模式.编辑R代码时,任何注释行(以#开头的那些注释行)会在我上面创建一个新行时自动获得最右边的选项卡.我应该如何更改我的.emacs.el文件来修复此问题?

例如,我有:

# Comment
Run Code Online (Sandbox Code Playgroud)

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

                                # Comment
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何提示.

hua*_*uan 62

如果您不希望缩进注释,请使用"###".根据手册,

默认情况下,以"###"开头的注释将与行的开头对齐.以"##"开头的注释与包含注释的块的当前缩进级别对齐.最后,以'#'开头的注释与右侧的列对齐(默认情况下为第40列,但此值由变量comment-column控制),或者只是在包含注释的行上的表达式之后,如果它扩展超出缩进列.

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

Jou*_*nen 32

(setq ess-fancy-comments nil)
Run Code Online (Sandbox Code Playgroud)

如果你从不想缩进单#评,或者

(add-hook 'ess-mode-hook 
          (lambda () 
            (local-set-key (kbd "RET") 'newline)))
Run Code Online (Sandbox Code Playgroud)

如果你想改变Enter的行为,那么它不会缩进.

  • 相反,我认为你应该使用"#"作为行尾注释,并且这些很有意义地缩进到同一列 - >漂亮的代码"listing".对于其他注释,确实习惯使用"##"(远远超过"###"):这些缩进作为该代码块中的其他"语句" (4认同)
  • 我仍然赞成决定我应该使用多少#s.一个通常是足够的,所以这个答案非常感谢,因为我的评论没有移动到我不希望它的位置...... (2认同)

jac*_*amm 5

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

(setq ess-indent-with-fancy-comments nil)
(require 'ess)
Run Code Online (Sandbox Code Playgroud)

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

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