让代码整齐的日常:Emacs自动缩进设置
写代码时,最烦人的不是逻辑错误,而是格式混乱。比如你刚从同事那儿接手一段Python脚本,每行缩进不一致,有的用空格,有的用Tab,看着就头疼。这时候,Emacs如果能自动处理缩进,效率立马提升一大截。
Emacs本身对多种编程语言都有默认的缩进规则,但默认不一定合你的习惯。比如Python通常用4个空格,而JavaScript有时用2个。我们可以通过简单的配置让它按你的想法来工作。
启用基本自动缩进
打开你的.emacs或init.el文件,加入以下内容:
(add-hook 'python-mode-hook (lambda () (setq indent-tabs-mode nil tab-width 4)))这段代码的意思是:当你打开.py文件时,自动关闭Tab字符缩进,使用4个空格代替,并统一以4个空格为一个缩进层级。类似地,如果你写JavaScript,可以换成js-mode:
(add-hook 'js-mode-hook (lambda () (setq indent-tabs-mode nil tab-width 2)))保存时自动格式化
有时候手滑用了Tab,或者别人提交的代码格式不对。可以在保存文件时自动修复缩进:
(add-hook 'before-save-hook 'delete-trailing-whitespace)这行命令会在保存前清理行尾多余的空格和Tab。配合上面的设置,能保证每次保存都是一次“美容”。
不同语言不同规则
实际项目中常要切换语言。你可以为不同模式设定独立规则:
(defun my-python-indent-setup ()
(setq indent-tabs-mode nil)
(setq tab-width 4)
(setq python-indent-offset 4))
(defun my-js-indent-setup ()
(setq indent-tabs-mode nil)
(setq tab-width 2)
(setq js-indent-level 2))
(add-hook 'python-mode-hook 'my-python-indent-setup)
(add-hook 'js-mode-hook 'my-js-indent-setup)这样,Python用4空格,JS用2空格,互不干扰。团队协作时,大家按统一风格写代码,Review起来也轻松。
实时跟随输入
想在敲回车后下一行自动对齐?开启electric-indent-mode就行:
(electric-indent-mode 1)它会让Emacs在你按下回车后,自动根据上下文决定新行的缩进位置。比如你在if语句里换行,新行会自动对齐到正确的层级。
这些配置看似小改动,但每天写几十次代码,积少成多,省下的不仅是按键次数,更是注意力。”}