求助:如何在Doom Emacs中配置tree-sitter

环境如下:

  • Mac 14.2
  • Emacs 29.2 使用doom up命令更新完最新配置后报错如下 报了以下错误: Warning (treesit): Cannot activate tree-sitter, because language grammar for rust is unavailable (not-found): (libtree-sitter-rust.so libtree-sitter-rust.so.0 libtree-sitter-rust.so.0.0 libtree-sitter-rust.dylib libtree-sitter-rust.dylib.0 libtree-sitter-rust.dylib.0.0) No such file or directory 自己尝试找tree-sitter-rust github仓库,使用cargo build也构建不出来 动态库,翻了好些博客始终没找到这个库的构建方法

可以用这个包 auto-install 一下

感谢大佬的回复。 我不咋熟悉elisp的写法,根据treesit-auto的README,它貌似是针对原生Emacs的配置,尝试写了如下代码:doom/package.el中

  :recipe (:host github :repo "renzmann/treesit-auto" :files ("*.el" "dist")))

在doom/config.el中

(use-package! treesit-auto
  :custom
  (treesit-auto-install 'prompt)
  :config
  (treesit-auto-add-to-auto-mode-alist 'all)
  (global-treesit-auto-mode))

是模仿以前copilot的配置方式,但是依旧报错tree-setter-rust.so的错误,还有就是报找不到tr treesit-auto文件的错误Error caused by user’s config or system: /Users/hal/.config/doom/config.el, (file-missing Cannot open load file No such file or directory treesit-auto)

package.el中的完整代码 (package! treesit-auto :recipe (:host github :repo "renzmann/treesit-auto" :files ("*.el" "dist")))

doom里面不要enable tree-sitter,还没处理跟29.2自带的treesit的兼容

多谢大佬指点。我目前是将所有的动态库安装成功了。然后不能启动和生效。不知道该怎么在doom 里面设置。

init.el文件里面不要启用tree-sitter,直接用emacs29自带的

好的。多谢大佬。

请教下大家,用tree-sitter的主要需求是什么?

我试用neovim时,tree-sitter是默认,总感觉除了高亮语法外也没什么需要了,其它lsp也覆盖了。

我主要是想在Emacs中写React代码的tsx语法可以代码高亮。tree-sitter在官方的的playground是可以解析出代码的语法树。 https://tree-sitter.github.io/tree-sitter/playground

我记得有包基于tree-sitter,可以实现代码块的mark, 但我用的也不多。的确, 我现在用tree-sitter,主要是高亮语法,比系统自带的tree-sit 配置简单。

@songpeng @54yeying 谢谢哇,我去了解下。看来大家主要可能主要也是用来语法高亮,有语法树可能可以搞跳转之类的,虽然和lsp功能有重叠。

今天找到了一种方法,可以比较好的显示语法高亮:

  1. 源码编译Emacs 29.2 选项中选择包含tree-sitter
  2. Doom Emacs配置如下 ~/.doom.d/package.el中添加:
(package! tree-sitter)
(package! tree-sitter-langs)

~/.doom.d/config.el中添加

(use-package! tree-sitter
  :config
  (require 'tree-sitter-langs)
  (global-tree-sitter-mode)
  (add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode))

效果如下:

之前的配置只显示了const, import,return 这几个关键字的颜色。现在可以比较好的显示颜色。所有的语法解析器动态库文件是之前配置时已经装好了。

init.el 里 :tools 开启 tree-sitter , :lang 里 开启 (cc +lsp +tree-sitter) 就可以了,哦,我这里是 C语言

多谢大佬答疑,我之前用brew 装的emacs-plus,是这么配置但是不能高亮。然后重新下载源码编译了29.2,配置了上面的内容,包括之前也配置了:tools :lang里面的相关配置。

我刚刚把package.el和config.el中的配置删除,重新doom sync后,也可以显示高亮了。我看的emacs-plus默认貌似有配置tree-sitter,但是当时不管怎么配置,还用了auto-treesitter这个包才高亮显示了几个关键字。