You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Doom Emacs如何配置StandardJs接入format-all实现保存自动格式化?

Doom Emacs 集成 standard-js 格式化器正确配置方法

之前配置失效的原因

  • 直接复用format-all原生的define-format-all-formatter代码无效:Doom的editor/format模块对format-all做了上层封装,原生定义方法不会被模块的加载逻辑识别,写在config.el中不会生效。
  • 自定义set-formatter!配置无效有三个核心问题:
    • 缺少--stdin参数:standard默认读取磁盘文件,不会从标准输入读取Emacs当前缓冲区的内容,导致程序执行时无输入源,直接挂起或退出。
    • 没有配置合法退出码:standard执行后如果存在lint警告(非语法错误)会返回退出码1,Doom默认将非0退出码判定为格式化执行失败,会直接丢弃格式化结果。
    • 没有配置语法错误匹配规则:无法正确识别格式化过程中出现的语法错误,报错信息不会正常反馈。
    • 没有适配web-mode的内容类型判断:web-mode会承载多种类型的前端文件,直接绑定会在html/css等非js内容下错误调用standard。

正确配置步骤

  1. 首先全局安装standard依赖:
npm install --global standard
  1. 在~/.doom.d/config.el中添加如下配置(确保你已经在init.el的doom模块声明中启用了:editor format模块):
;; 注册standard格式化器
(set-formatter! 'standard
  "standard --fix --stdin"
  :modes '(js-mode js2-mode js3-mode js2-jsx-mode jsx-mode rjsx-mode react-mode)
  :ok-statuses '(0 1)
  :error-regexp ".*?:.*?:[0-9]+:[0-9]+: Parsing error:")

;; 适配web-mode,仅在js/jsx内容类型下使用standard
(add-hook! 'web-mode-hook
  (defun +web-mode-bind-standard-formatter-h ()
    (when (member web-mode-content-type '("javascript" "jsx"))
      (setq-hook! 'web-mode-hook +format-with 'standard))))
  1. 打开终端执行doom sync同步配置,之后重启Emacs即可生效。

可选配置

  • 如果需要开启对应模式的保存自动格式化,添加如下配置:
(after! format
  (pushnew! +format-on-save-enabled-modes
            'js-mode 'js2-mode 'rjsx-mode 'web-mode))
  • 如果之前给js类模式绑定过prettier作为格式化器,记得从prettier的:modes列表中移除js相关模式,避免格式化器冲突。

验证方法

打开任意js文件,执行M-x +format/buffer,文件内容被正常格式化、无报错即代表配置生效。


内容的提问来源于stack exchange,提问作者Ceintu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:36:27