如何自动调整缩进

最近编辑代码的时候遇到了各种缩进, 每次都要手动调整 major mode indent level. 有没有自动猜测缩进风格的工具, 自动调整用空格还是tab, 以及用于缩进的空格数?

从 emacswiki 上盗了张图:

这要看你调整缩进是什么原因引起的吧!

如果是多人协作方面端,应该加 lint工具 才是根本解决办法

如果只是自己写的时候,想统一缩进,那应该有两种方式可以实现:

  1. major-modeindent 相关的写到你自己的配置中

  2. 添加 editorconfig 配置,每个项目配置

第二种方法比第一种方法要灵活点

主要是编辑别人的代码. 比方说 fork 一个 repo, 然后改代码的时候发现当前缩进设置和原代码风格不一致, 就要停下来改一下缩进设置, 很烦躁.

一个naive的C实现(不过我没考虑TAB

(defun style-by-indent (indent)
  (catch 'ret
    (dolist (style c-style-alist)
      (when (eq (alist-get 'c-basic-offset style)
                indent)
        (throw 'ret (car style))))))

(defvar guess-indent-fn-alist
  '((c-mode . (lambda ()
                (save-excursion
                  (goto-char (point-min))
                  (if (re-search-forward "{\n" nil t)
                      (if-let* ((indent (current-indentation))
                                (style (style-by-indent
                                        indent)))
                          (progn (c-set-style style)
                                 (message "Set to %s indent style w/ %d indent steps"
                                          style indent))
                        (message "Can’t find style with %d indent steps"
                                 indent))
                    (message "Can’t guess indent")))))))

(defun guess-indent ()
  (interactive)
  (when-let ((fn (alist-get major-mode guess-indent-fn-alist)))
    (funcall fn)))

如果是这样的话,我觉得你可以在项目里面引入 editorconfig

几乎主流的编辑器都支持配置这个的,然后让项目里面的人安装下 editorconfig 插件就好了

不然你把缩进改了,提交到仓库里,别人一编辑,就又回去了

那就很糟心了

代码风格这种事,我觉得还是要大家内部统一才行,只有自己一个人努力是没啥效果的

对呀, 就是想和别人一样…

我来试试 @casouri , 谢谢!