“if”的缩进在 Emacs 下的 Ocaml 中

发布于 2024-11-25 05:43:32 字数 538 浏览 3 评论 0 原文

我正在使用 Emacs 编写 Ocaml 代码,目前 if 的缩进设置如下:

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

我想实现与 Caml 编程指南

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

谁能告诉我哪个参数与之相关?谢谢

编辑1:这是我的.emacs

I am coding Ocaml with Emacs, at the moment the setting of the indentation of if gives the following:

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

I would like to realize the same format as Caml programming guidelines:

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

Could anyone tell me which parameter is related to that? Thank you

Edit1: here is my .emacs

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

定格我的天空 2024-12-02 05:43:32

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

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

You can now use ocp-indent which will (almost always) respect the Caml programming guidelines. The only difference is that it will indent the last expression, to avoid confusing scoping errors:

if cond1 then e1 else
if cond2 then e2 else
if cond3 then e3 else
  e4;
e5
不回头走下去 2024-12-02 05:43:32

似乎有些不对劲。您是否使用 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-mode,我无能为力你。但请注意,与普遍的看法相反,发行版中的 caml 模式非常好,并且仍然由 OCaml 的作者维护。

Something seems to be wrong. Are you using the caml-mode from the OCaml distribution ? Because I do and it indents according to the programming guidelines without setting any parameter. That's what I have in my .emacs (the mode is installed in ~/.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))

If you are using tuareg-mode I cannot help you. Note however that, contrary to popular belief, the caml-mode from the distribution is perfectly fine and is still maintained by OCaml's authors.

就此别过 2024-12-02 05:43:32

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

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

我不知道如果您没有嵌套 if,这是否会导致其他不良缩进尽管。您还可以 Mxcustomize-group RET tuareg RET 查看所有缩进(和其他)选项。

You can set the variable tuareg-if-then-else-indent to 0 which will then indent your example as

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

I don't know if that causes other undesirable indentation in case you don't have nested if's though. You can also M-x customize-group RET tuareg RET to see all the indentation (and other) options.

清晰传感 2024-12-02 05:43:32

您对以下内容不满意吗?

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

Are you not satisfied with the following?

if c1 then e1
else if c2 then e2
else if c3 then e3
else e4
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文