在许多语言中,行注释以单个符号开头,例如在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)
。