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 のコメントを異なる方法でインデントします。2 つ使用する場合は、目的のインデントを取得する必要があります。

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

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

さらに、3 つのセミコロン;;;はまったく再インデントされません。通常、これらはソース ファイル内の新しい主要セクションをマークするために使用されます。

于 2013-01-07T08:56:47.450 に答える
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 に答える
1

コメントインデント機能をカスタマイズできます

comment-indent-default の代わりに独自の関数を使用します。

最後の行の `comment-column' を (save-excursion (forward-line -1)(current-indentation)) に置き換えて、新しいものを書きます。

出発点を提供する必要があります。

于 2013-01-07T13:19:06.547 に答える