最近编辑代码的时候遇到了各种缩进, 每次都要手动调整 major mode indent level. 有没有自动猜测缩进风格的工具, 自动调整用空格还是tab, 以及用于缩进的空格数?
从 emacswiki 上盗了张图:
最近编辑代码的时候遇到了各种缩进, 每次都要手动调整 major mode indent level. 有没有自动猜测缩进风格的工具, 自动调整用空格还是tab, 以及用于缩进的空格数?
从 emacswiki 上盗了张图:
这要看你调整缩进是什么原因引起的吧!
如果是多人协作方面端,应该加 lint工具
才是根本解决办法
如果只是自己写的时候,想统一缩进,那应该有两种方式可以实现:
把 major-mode
的 indent
相关的写到你自己的配置中
添加 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
插件就好了
不然你把缩进改了,提交到仓库里,别人一编辑,就又回去了
那就很糟心了
代码风格这种事,我觉得还是要大家内部统一才行,只有自己一个人努力是没啥效果的