我正在使用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
答案 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