萌新求问关于tree-sitter的安装问题

如果需要额外手动设置 major-mode-remap-alist,说明 treesit-auto 根本没生效。

你可以观察 treesit-auto--ready-ptreesit-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")))