emacs - 凸轮模式是否缩进注释?

标签 emacs indentation ml

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

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

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

最佳答案

查看源代码发现,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-compute-final-indent .可能——我不确定也没有测试过——将整个实现复制到你的 init.el 就足够了。 ,然后简单地删除第一个 cond完全分支。在这种情况下,缩进将由最后一个分支处理,它计算表达式的缩进偏移量。这可能,或者更有可能不起作用。

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

真用tuareg-mode ,充其量来自 MELPA,它提供了来自 tuareg-mode 的最新快照SVN。 tuareg-mode发展历程也有点昏昏欲睡,但还有are at least some major changes with the last two years .

关于emacs - 凸轮模式是否缩进注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863439/

相关文章:

module - '如何正确使用高阶仿函数 ?' or ' 如何在 funsigs 中获得真正的乐趣?

sml - 在 sml 中匹配非穷举

emacs - 组织模式 html 导出

emacs - 如何在更改为“完成”后将 TODO 重新归档到给定位置?

php - 在 PHP 中整理 HTML5 输出缩进

ocaml - Ocaml中的重载

Emacs:如何为 coffeescript 生成 etags?

Emacs:尝试切换到 latex 模式时出现与 dbus 相关的错误

Django 模板引擎缩进

python - 语法错误 : mismatched input 'print' expecting INDENT