3

我正在.ml编辑Emacs. 我的默认模式是caml-mode.

我意识到Tab在一行或M-x indent-region一个区域上不会调整评论的位置,而tuareg-mode这样做。

caml-mode缩进评论自然吗?有什么我可以做的吗?

4

1 回答 1

1

查看源代码会发现,caml-mode根本没有缩进注释。根本原因caml-compute-final-indent在于caml.el

(defun caml-compute-final-indent ()
  (save-excursion
    (back-to-indentation)
    (cond
     ((and (bolp) (looking-at comment-start-skip)) (current-column))
     ((caml-in-comment-p)
      (let ((closing (looking-at "\\*)"))
            (comment-mark (looking-at "\\*")))
        (caml-backward-comment)
        (looking-at comment-start-skip)
        (+ (current-column)
           (cond
            (closing 1)
            (comment-mark 1)
            (t (- (match-end 0) (match-beginning 0)))))))
     (t (let* ((leading (looking-at caml-leading-kwops-regexp))
               (assoc-val (if leading (assoc (caml-match-string 0)
                                             caml-leading-kwops-alist)))
               (extra (if leading (symbol-value (nth 1 assoc-val)) 0))
               (prio (if leading (nth 2 assoc-val)
                       caml-max-indent-priority))
               (basic (caml-compute-basic-indent prio)))
          (max 0 (if extra (+ extra basic) (current-column))))))))

此函数计算点处线的缩进偏移量。表达式中的第一个分支cond处理注释的开头,并简单地返回原始缩进偏移量不变。

要解决此问题,您必须重新实施或建议caml-compute-final-indent. 可能——我不确定,也没有测试过——将整个实现复制到你的init.el,然后完全删除第一个cond分支就足够了。在这种情况下,缩进将由最后一个分支处理,该分支计算表达式的缩进偏移量。这可能,或者更有可能不起作用。

从我在源代码中看到的内容来看,我建议不要使用caml-mode. 代码已经过时,并且没有遵循现代 Emacs 模式的许多强制约定,也没有使用现代 Emacs 版本提供的功能来处理缩进。它并没有真正积极维护,最近的更改是小错误或格式修复。所有重大贡献都发生在至少五年前。

真正使用tuareg-mode,充其量来自提供来自tuareg-modeSVN 的最新快照的 MELPA。的发展tuareg-mode也有些昏昏欲睡,但至少与最近两年发生了一些重大变化

于 2013-04-12T13:18:42.667 回答