如果需要额外手动设置 major-mode-remap-alist
,说明 treesit-auto
根本没生效。
你可以观察 treesit-auto--ready-p
或 treesit-ready-p
的返回值,只有当它返回 t
的时候 treesit-auto
才会起作用。
以下是一份带调试输出的最小配置:(请酌情修改)
(setq user-emacs-directory "~/.emacs.d/")
(setq package-user-dir (format "~/.emacs.d/%s.%s/elpa/"
emacs-major-version emacs-minor-version))
(package-initialize)
(require 'use-package)
(advice-add 'treesit-auto--ready-p :around
(defun treesit-auto--ready-p@debug (orig-fn mode)
(let ((return (funcall orig-fn mode)))
(message "==> [treesit-auto--ready-p] mode: %s, return: (actual: %s, expected: t)" mode return)
return)))
(use-package treesit-auto
:config
(setq treesit-font-lock-level 4)
;; 为减少输出干扰, 去掉多余的定义
(setq treesit-auto-recipe-list
`(,(make-treesit-auto-recipe
:lang 'c
:ts-mode 'c-ts-mode
:remap 'c-mode
:url "https://github.com/tree-sitter/tree-sitter-c"
:ext "\\.c\\'")))
(global-treesit-auto-mode))
(add-hook 'emacs-startup-hook
(lambda ()
(view-echo-area-messages)
(find-file "/path/to/file.c")))