繁体   English   中英

caml-mode是否缩进评论?

[英]Does caml-mode indent comments?

我在Emacs下编辑.ml代码。 我的默认模式是caml-mode

我意识到Mx indent-region上的TabMx indent-region上的Mx indent-region区域不会调整注释的位置,而tuareg-mode

不是caml-mode缩进评论的性质? 有什么我能做的吗?

看一下源代码就会发现, caml-mode根本没有缩进注释。 根本原因是在caml-compute-final-indentcaml.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 ,最好是MELPA,它提供来自tuareg-mode SVN的最新快照。 tuareg-mode的发展也有些困倦,但过去两年至少有一些重大变化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM