错误的Emacs评论缩进

时间:2014-10-11 07:40:42

标签: emacs elisp

在许多语言中,行注释以单个符号开头,例如Python中的#和R。

我发现在Emacs中,在编写这样的行注释时,我必须重复两次注释符号以进行正确的缩进。

请参阅以下示例:

(setq x-select-enable-clipboard t)
                                        ;using a single comment symbol indents wrongly
;; repeating the comment symbol indents fine
(setq-default c-basic-offset 4)

单身;在行的开头无法得到正确的缩进。如何获得正确的设置?谢谢!

修改

我自己找到了解决方案。在ESS的文件中:

  

评论也由ESS专门处理,使用借来的想法   来自Emacs-Lisp压痕风格。默认情况下,评论开始   '###'与行的开头对齐。评论   以'##'开头,与当前缩进级别对齐   对于包含评论的块。最后,评论以   '#'与右侧的列对齐(默认情况下为第40列,   但是这个值是由变量comment-column,)控制的   在包含注释的行上的表达式后,如果它扩展   超出缩进列。您关闭默认行为   将行(setq ess-fancy-comments nil)添加到.emacs文件中。

所以我把它放在我的.emacs中:

(setq ess-fancy-comments nil) ; this is for ESS

我认为对于Python模式,它有一个类似的变量。

2 个答案:

答案 0 :(得分:10)

您的示例使用Emacs Lisp,在此语言中,标准约定是单个;向右缩进,而两个;;缩进,代码将在此处缩进。我强烈建议你坚持这个约定,否则你的代码将会脱颖而出。三个;;;向左缩进。四个;;;;缩进,用于主要部分。 (见https://www.gnu.org/software/emacs/manual/html_node/elisp/Comment-Tips.html

对于Ruby,就我所知,注释总是缩进为代码。

答案 1 :(得分:2)

主要模式应该妥善处理。如果没有,请考虑向维护人员提交增强请求或错误报告。当然,"正确"可能是旁观者的眼睛。但是,您可以尝试将您的偏好设为已知。并检查主模式代码是否已经有用户选项。

除此之外,作为变量 comment-indent-function 的值的函数控制着它。通常,这是由主模式设置的。您可以将其设置为您想要的任何功能(例如,在模式挂钩上,以便您的定义覆盖主模式代码提供的定义)。

它不接受任何参数,并返回您希望注释缩进的列。

以下是将注释缩进到第0列的代码,例如:

(defun foo () (setq comment-indent-function (lambda () 0)))
(add-hook 'SOME-MODE-HOOK 'foo 'APPEND)

例如,对于Emacs-Lisp模式,您可以使用(add-hook 'emacs-lisp-mode-hook 'foo 'APPEND)