Problem
启用 c-ts-mode 报错,但 python-ts-mode, c+±ts-mode 正常运行
⛔ Warning (treesit): Cannot activate tree-sitter, because language grammar for c is unavailable (version-mismatch): 15
⛔ Warning (treesit): Cannot activate tree-sitter, because language grammar for c is unavailable (version-mismatch): 15
⛔ Warning (treesit): Cannot activate tree-sitter, because language grammar for c is unavailable (version-mismatch): 15
my config
use built-in packages treesit, instead of tree-sitter
(setq treesit-language-source-alist
'((bash "https://github.com/tree-sitter/tree-sitter-bash")
(c "https://github.com/tree-sitter/tree-sitter-c")
......))
(setq major-mode-remap-alist
'((c-mode . c-ts-mode)
......))
treesit-language-source-alist
这个变量我记得只是指定 grammar 的源,并不下载 grammar.
你还要 treesit-install-language-grammar
才行。看看 .emacs.d/tree-sitter
下面是不是没有 c 的 grammar
这个当然有
.emacs.d/tree-sitter on master [!]
❯ ls
libtree-sitter-bash.so libtree-sitter-markdown.so
libtree-sitter-cpp.so libtree-sitter-org.so
libtree-sitter-c.so libtree-sitter-python.so
libtree-sitter-css.so libtree-sitter-toml.so
libtree-sitter-html.so libtree-sitter-tsx.so
libtree-sitter-javascript.so libtree-sitter-typescript.so
libtree-sitter-json.so libtree-sitter-yaml.so
报错最后说的是 version mismatch, 你的 libtree-sitter-c.so 是啥时候下的,要不更新一下
你的 emacs, 系统里的 tree-sitter lib 和这个 grammar 的版本都得对上才行。不能一个新一个旧,这就得你自己来确定了。有时候可能得降级 libtree-sitter-c.so
原來如此。
我去看看到底是怎么回事。
这是我 emacs 的版本
❯ apt list emacs
emacs/testing,testing,now 1:30.1+1-5 all [installed]
我的
Name : emacs
Version : 30.1-5
Name : tree-sitter
Version : 0.25.7-1
Library installed to /home/noel/.emacs.d/tree-sitter/libtree-sitter-c.so
("https://github.com/tree-sitter/tree-sitter-c" "v0.24.1" "src")
用起来没报错和警告
使用 20.7 的版本成功了。
下面列举一下我是如何编译的。
npm install
gcc -shared -fPIC \
src/parser.c \
-I./src \
-o libtree-sitter-c.so