求助:如何在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这个包才高亮显示了几个关键字。

请问,能不能具体介绍一下利用doomemacs中的配置来把emacs设置成一个C语言的IDE?谢谢! 我发现doomemacs的说明文档里面把+lsp划掉了,是不是用了+tree-sitter就不需要+lsp了?

Tree-sitter 跟 LSP 是兩種不同的東西. 通常兩個都需要!~ :thinking:

请问一下,如何自动编译正在打开的的文件。我现在是用emacs打开一个vterm, 然后在里面像命令行一样输入cc ***.c 编译,在运行.out 文件。有没有自动一点的方法?谢谢!

楼上大佬说的,两个都要的。

lsp我用ccls(clangd也没差啦),通常要想办法生成compile_commands.json,一般来说可以依靠构建系统来生成,实在不行的话自己了解一下工程的编译flags、头文件搜索目录、附加的宏,然后自己用python写一个小脚本按格式生成compile_commands.json就可以了。

觉得json文件麻烦的话,ccls还有一种简单一点的方式,把通用的flags、头文件搜索路径等写到.ccls文件里,也是可以的。clangd的话我记得我试过也有类似的方式(自己看看对应的文档了)

vterm的话,我也是自己写了一个快捷键来触发编译(可以搜索一下我怕曾经提问过论坛的大佬如何向vterm输入命令并执行)。

我比较笨,我写了一个函数先去加载project根目录下的一个.dark.el文件,这个文件里面包含了一些编译命令(这样只要每个project我都放写了不同命令的.dark.el文件就行了),然后将里面的编译、清理、生成compile_commands.json分别绑定到F5、6、7、8就可以了,一按就弹出vterm窗口并开始执行。