错误的Emacs评论缩进

Yin*_*Zhu 12 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)
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

评论也由ESS特别处理,使用了从Emacs-Lisp缩进样式借来的想法.默认情况下,以"###"开头的注释将与行的开头对齐.以"##"开头的注释与包含注释的块的当前缩进级别对齐.最后,以'#'开头的注释与右侧的列对齐(默认情况下为第40列,但此值由变量comment-column控制),或者只是在包含注释的行上的表达式之后,如果它扩展超出缩进列.您可以通过将行(setq ess-fancy-comments nil)添加到.emacs文件来关闭默认行为.

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

(setq ess-fancy-comments nil) ; this is for ESS
Run Code Online (Sandbox Code Playgroud)

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

Lin*_*cer 10

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

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


Dre*_*rew 3

主要模式应该妥善处理这个问题。如果没有,请考虑向维护人员提交增强请求或错误报告。当然,“正确”可能是情人眼里出西施。不过,您可以尝试让别人知道您的偏好。并检查主模式代码是否已经有这方面的用户选项。

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

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

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

(defun foo () (setq comment-indent-function (lambda () 0)))
(add-hook 'SOME-MODE-HOOK 'foo 'APPEND)
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案应该被拒绝:虽然表面上是正确的,但该行为不是一个错误,并且这个答案背叛了对 emacs 约定的无知,例如 https://www.gnu.org/software/emacs/manual/html_node/elisp/Comment -提示.html (2认同)