代码之家  ›  专栏  ›  技术社区  ›  SoftTimur

caml模式是否缩进注释?

  •  2
  • SoftTimur  · 技术社区  · 11 年前

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

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

    凸轮模式 按性质缩进注释?我能做些什么吗?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Thomas    11 年前

    看一下源代码就会发现 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 .