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 后,挂钩方法不再适用于我。setq
在 require 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 模式 - 用于评论区域的选项卡的主要内容,如果未能解决你的问题,请参考以下文章