1

我试图弄清楚如何在 tuareg 模式下修复缩进,以便它不会在匿名函数和结构中插入大量缩进。我过去使用过它,但它没有这样做,但现在它是。我想知道如何配置它以便这个问题消失。

例如。这段代码通过 tuareg 模式缩进如下:

let m = List.map (fun (va,vb) ->
                  (va,vb)
                 ) m
in

我希望它像这样缩进:

let m = List.map (fun (va,vb) ->
  (va,vb)
) m
in

同样,tuareg 像这样缩进这段代码:

module SMap = Map.Make(struct
                        type t = string
                        let compare = compare
                      end)

我希望它像这样缩进:

module SMap = Map.Make(struct
  type t = string
  let compare = compare
end)

我正在使用 2013 年 11 月 12 日发布的 tuareg 模式 2.0.7。

更新:我可以确认回滚到 2.0.6 为我解决了这个问题。但是,我仍在寻找解决此问题的配置选项。

4

2 回答 2

0

用我的~/.emacs

(custom-set-variables
 '(custom-enabled-themes (quote (tango-dark)))
 '(tool-bar-mode nil)
 '(tuareg-begin-indent 4)
 '(tuareg-class-indent 4)
 '(tuareg-default-indent 4)
 '(tuareg-do-indent 4)
 '(tuareg-for-while-indent 4)
 '(tuareg-fun-indent 4)
 '(tuareg-if-then-else-indent 4)
 '(tuareg-let-indent 4)
 '(tuareg-match-indent 4)
 '(tuareg-method-indent 4)
 '(tuareg-pipe-extra-unindent 4)
 '(tuareg-sig-struct-indent 4)
 '(tuareg-try-indent 4)
 '(tuareg-val-indent 4))
(custom-set-faces
 '(default ((t (:family "DejaVu Sans Mono" :foundry "unknown" :slant normal :weight normal :height 98 :width normal)))))

;disable backup
(setq backup-inhibited t)

;disable auto save
(setq auto-save-default nil)

;disable line wrapping
(setq-default truncate-lines t)

;space only indentation
(setq-default indent-tabs-mode nil)

您的示例缩进为

图阿雷格模式

随意将缩进调整为 2 个空格。


更新:似乎 2.0.7 版本确实使用了新的缩进算法。但是,在tuareg-el中评论这两行:

1213 ;;(when (require 'smie nil 'noerror)
1214 ;;  (setq tuareg-use-smie t))

恢复到“旧”缩进模式。

于 2013-11-19T11:17:10.557 回答
0

另一种解决方案是使用ocp-indent。使用opam安装

opam install ocp-indent

然后在您的 .emacs 文件中的某处使用以下 elisp 代码来加载和配置 ocp-indent。

;; Add opam emacs directory to the load-path
(setq opam-share (substring (shell-command-to-string "opam config var share 2> /dev/null") 0 -1))
(add-to-list 'load-path (concat opam-share "/emacs/site-lisp"))

;; Setup environment variables using OPAM
(dolist (var (car (read-from-string (shell-command-to-string "opam config env --sexp"))))
  (setenv (car var) (cadr var)))

;; One of the `opam config env` variables is PATH. Update `exec-path` to that.
(setq exec-path (split-string (getenv "PATH") path-separator))

(require 'ocp-indent)

(add-hook 'tuareg-mode-hook (lambda ()
  ;;  Your other tuareg specific settings here.
  (setq indent-line-function 'ocp-indent-line)))
于 2014-12-04T20:05:00.197 回答