Как настроить отступ анонимной структуры и функции в режиме туарегов?
Я пытаюсь выяснить, как исправить отступ в режиме туарега, чтобы он не вставлял огромное количество отступов в анонимные функции и структуры. Я использовал это в прошлом, и он не сделал этого, но сейчас это так. Я хотел бы знать, как настроить это так, чтобы эта проблема ушла.
Например. Этот код имеет отступ с помощью режима туарега:
let m = List.map (fun (va,vb) ->
(va,vb)
) m
in
Я хотел бы, чтобы это было с отступом, как это:
let m = List.map (fun (va,vb) ->
(va,vb)
) m
in
Точно так же, туарег отступает этот код так:
module SMap = Map.Make(struct
type t = string
let compare = compare
end)
Я бы предпочел, чтобы он был с таким отступом:
module SMap = Map.Make(struct
type t = string
let compare = compare
end)
Я использую режим туарега 2.0.7, который был выпущен 12 ноября 2013 года.
Обновление: я могу подтвердить, что откат до 2.0.6 решает эту проблему для меня. Тем не менее, я все еще ищу вариант конфигурации, чтобы исправить это.
2 ответа
С моими ~/.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 действительно использует новый алгоритм отступов. Однако, комментируя эти две строки в туареге-эле:
1213 ;;(when (require 'smie nil 'noerror)
1214 ;; (setq tuareg-use-smie t))
возвращается в "старый" режим отступа.
Альтернативное решение - использовать 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)))