Emacs中注释的缩排错误注释、错误、缩排、Emacs

2023-09-04 01:44:59 作者:柠檬加醋心飞扬@

在许多语言中,行注释以单个符号开头,例如在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,)或 在包含注释的行上的表达式之后(如果它扩展 在缩进列之外。您可以通过以下方式关闭默认行为 向您的.emacs文件添加行(setq ess-flick-Comments nil)。

所以我在我的.emacs中放了这个:

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

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

推荐答案

主模式应正确处理此问题。如果没有,请考虑向维护人员提交增强请求或错误报告。当然,"恰当"可能在旁观者的眼里。不过,你可以试着让别人知道你的喜好。并检查主模式代码是否已具有此用户选项。

除此之外,作为变量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)

 
精彩推荐
图片推荐