看一下源代码就会发现
caml-mode
完全不缩进注释。根本原因在于
caml-compute-final-indent
in
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计算最终缩进
。可能我不确定,也没有测试过,将整个实现复制到您的
init.el
,然后简单地删除第一个
秒
完全分支。在这种情况下,缩进将由最后一个分支处理,该分支计算表达式的缩进偏移量。这可能奏效,或者更有可能行不通。
根据我在源代码中看到的内容,我建议不要
凸轮模式
。该代码已经过时,并且没有遵循现代Emacs模式所必需的许多约定,也没有使用现代Emacs版本提供的功能来处理缩进。它是
not really actively maintained
,最近的更改都是小错误或格式化修复。所有重大贡献都发生在至少五年前。
真的很有用
tuareg-mode
,最好来自MELPA,它提供了
tuareg模式
SVN中。的发展
tuareg模式
也有点昏昏欲睡,但是
are at least some major changes with the last two years
.