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

如何在Emacs中临时全局禁用flycheck/prettier等模式?

问题

我常用rgrep查找需要修改的文件,再通过宏遍历这些文件完成修改并保存。这个流程很便捷,但存在问题:保存文件时prettier会自动检查格式化每个文件,flycheck(基于eslint)也会占用大量CPU资源。

我想知道有没有合适的方法可以临时全局禁用某些模式(尤其是flycheck)?我的宏会访问大量文件,且完成后仍需正常使用这些模式。

编辑补充:以下是我在rjsx-mode中加载flycheck的配置:

;; disable jshint since we prefer eslint checking
(setq-default flycheck-disabled-checkers
              (append flycheck-disabled-checkers
                      '(javascript-jshint)))

;; disable json-jsonlist checking for json files
(setq-default flycheck-disabled-checkers
              (append flycheck-disabled-checkers
                      '(json-jsonlist)))


;; use eslint with web-mode for jsx files
(defun my/use-eslint-from-node-modules ()
  (let* ((root (locate-dominating-file
                (or (buffer-file-name) default-directory)
                "node_modules"))
         (eslint (and root
                      (expand-file-name "node_modules/eslint/bin/eslint.js"
                                        root))))
    (when (and eslint (file-executable-p eslint))
      (setq-local flycheck-javascript-eslint-executable eslint))))
(add-hook 'flycheck-mode-hook #'my/use-eslint-from-node-modules)
(flycheck-add-mode 'javascript-eslint 'rjsx-mode)
实现思路与解决方案

针对批量文件修改时临时禁用flycheck和prettier的需求,有以下几种可靠的实现思路:

1. 用宏包裹「禁用-执行任务-恢复」流程

直接在批量处理逻辑前后添加禁用和恢复代码,确保任务完成后自动回归原有配置,适合录制宏后手动编辑宏代码的场景:

(defun my/batch-modify-files ()
  ;; 保存原有模式状态
  (let ((original-flycheck-state flycheck-global-mode)
        (original-prettier-state prettier-mode))
    ;; 临时禁用目标模式
    (when flycheck-global-mode
      (flycheck-mode -1)
      (setq flycheck-global-mode nil))
    (when prettier-mode
      (prettier-mode -1))

    ;; 这里放入你原本的批量修改逻辑(比如遍历rgrep结果的代码)
    ;; ...

    ;; 恢复原有模式状态
    (when original-flycheck-state
      (flycheck-mode 1)
      (setq flycheck-global-mode t))
    (when original-prettier-state
      (prettier-mode 1))))

2. 临时关闭flycheck自动检查触发

如果不想完全禁用flycheck模式,只是避免批量修改时的自动检查,可以修改触发条件:

(defun my/toggle-flycheck-save-check ()
  (interactive)
  (if (memq 'save flycheck-check-syntax-automatically)
      (setq flycheck-check-syntax-automatically (remove 'save flycheck-check-syntax-automatically))
    (add-to-list 'flycheck-check-syntax-automatically 'save)))

批量处理前调用M-x my/toggle-flycheck-save-check关闭保存时的自动检查,处理完成后再次调用恢复即可。

3. 全局禁用flycheck检查器

不需要关闭flycheck模式本身,仅让它停止执行检查任务,适合需要保留模式界面但降低CPU占用的场景:

;; 临时全局禁用所有检查器
(setq flycheck-disabled-checkers '(all))
;; 批量处理完成后恢复原有配置
(setq flycheck-disabled-checkers '(javascript-jshint json-jsonlist))

4. 临时禁用prettier自动格式化

如果prettier通过prettier-mode启用,除了直接关闭模式,还可以单独禁用保存时的自动格式化:

;; 临时禁用自动格式化
(setq prettier-mode-auto-format nil)
;; 处理完成后恢复
(setq prettier-mode-auto-format t)

或者临时移除before-save-hook中的prettier钩子:

(let ((original-hook before-save-hook))
  (setq before-save-hook (remove 'prettier-before-save before-save-hook))
  ;; 执行批量修改逻辑
  ;; ...
  (setq before-save-hook original-hook))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:20:37