Emacs下Ocaml中“if”的缩进

时间:2011-07-19 17:11:24

标签: emacs ocaml indentation

我正在使用Emacs对Ocaml进行编码,目前if缩进的设置提供了以下内容:

if cond1 then e1 else
  if cond2 then e2 else
    if cond3 then e3 else
      e4

我想实现与Caml programming guidelines相同的格式:

if cond1 then e1 else
if cond2 then e2 else
if cond3 then e3 else
e4

有人能告诉我哪个参数与此相关吗?谢谢

编辑1:这是我的.emacs

4 个答案:

答案 0 :(得分:2)

您现在可以使用ocp-indent,它将(几乎总是)尊重Caml编程指南。唯一的区别是它会缩进最后一个表达式,以避免混淆作用域错误:

if cond1 then e1 else
if cond2 then e2 else
if cond3 then e3 else
  e4;
e5

答案 1 :(得分:1)

似乎有些不对劲。您使用的是OCaml发行版中的caml模式吗?因为我这样做并且根据编程指南进行缩进而不设置任何参数。这就是我在.emacs中所拥有的(该模式安装在~/.emacs.d/caml-mode中):

;; Caml mode
(setq load-path (cons "~/.emacs.d/caml-mode" load-path))
(setq auto-mode-alist (cons '("\\.ml[iylp]?" . caml-mode) auto-mode-alist))
(autoload 'caml-mode "caml" "Major mode for editing Caml code." t)
(autoload 'run-caml "inf-caml" "Run an inferior Caml process." t)
(autoload 'camldebug "camldebug" "Run the Caml debugger." t)
(if window-system (require 'caml-font))

如果您使用的是tuareg模式,我无法帮助您。但请注意,与流行的看法相反,来自分布的caml模式非常精细,并且仍由OCaml的作者维护。

答案 2 :(得分:1)

您可以将变量tuareg-if-then-else-indent设置为0,然后将您的示例缩进为

if cond1 then e1 else
if cond2 then e2 else
if cond3 then e3 else
e4

我不知道是否会导致其他不良缩进,以防你没有嵌套if。您还可以M-x customize-group RET tuareg RET查看所有缩进(和其他)选项。

答案 3 :(得分:0)

您对以下内容不满意吗?

if c1 then e1
else if c2 then e2
else if c3 then e3
else e4