11

默认情况下,注释的缩进级别对我来说似乎很陌生。

(defun example ()
  just
  some
                ; a comment
  words)

如何调整它以使第一个分号与常规 Lisp 形式垂直对齐?

(defun example ()
  just
  some
  ; a comment
  words)

我可以发现默认机制通过将注释与固定列对齐(可通过 查询M-x comment-set-column)来工作,并且可以修改comment-indent-function变量(将其设置为 nil 部分解决了我的问题)。

4

3 回答 3

11

根据使用的分号数量,Emacs 以不同的方式缩进 elisp 中的注释。如果你使用两个,你应该得到你想要的缩进:

(defun test-single ()
                                        ; A single semicolon
  nil)

(defun test-double ()
  ;; Do two semicolons make a colon ;)
  nil)

此外,三个分号;;;根本不会重新缩进。通常,它们用于标记源文件中的新主要部分。

于 2013-01-07T08:56:47.450 回答
1

您可以自定义注释缩进功能

代替 comment-indent-default 使用你自己的函数。

通过用 (save-excursion (forward-line -1)(current-indentation)) 替换最后一行 `comment-column' 来编写新的

应该提供一个起点。

于 2013-01-07T13:19:06.547 回答
1

如果您从中删除单个分号注释的大小写,lisp-indent-line它将按照您的意愿行事。

我已经在下面的代码中删除了它,你可以将它添加到你的 emacs 配置中:

(defun lisp-indent-line (&optional _whole-exp)
  "Indent current line as Lisp code.
With argument, indent any additional lines of the same expression
rigidly along with this one.
Modified to indent single semicolon comments like double semicolon comments"
  (interactive "P")
  (let ((indent (calculate-lisp-indent)) shift-amt
    (pos (- (point-max) (point)))
    (beg (progn (beginning-of-line) (point))))
    (skip-chars-forward " \t")
    (if (or (null indent) (looking-at "\\s<\\s<\\s<"))
    ;; Don't alter indentation of a ;;; comment line
    ;; or a line that starts in a string.
        ;; FIXME: inconsistency: comment-indent moves ;;; to column 0.
    (goto-char (- (point-max) pos))
      (if (listp indent) (setq indent (car indent)))
      (setq shift-amt (- indent (current-column)))
      (if (zerop shift-amt)
      nil
    (delete-region beg (point))
    (indent-to indent))
      ;; If initial point was within line's indentation,
      ;; position after the indentation.  Else stay at same point in text.
      (if (> (- (point-max) pos) (point))
      (goto-char (- (point-max) pos))))))
于 2016-11-01T19:10:22.480 回答