一个月萌新求助tree-sitter的高亮配置

先说一下系统环境,在ubuntu22.04 server服务器中,手动编译的emacs-29.3,配置完tree-sitter之后,感觉高亮显示的颜色和之前使用的ide相差很大,能否自己配置高亮显示的颜色。如下图中

求助是否有办法修改这个颜色,我google并没有找到有类似的示例。希望有大神已经有过类似的配置可以参考一下。 我使用的配置是基于 子龙山人 推荐的配置修改的 GitHub - condy0919/.emacs.d: 一个快速且实用的 Emacs 配置

1 个赞

同一段代码,在terminal的emacs中打开是下图中的效果 image

可以的,但是有个前提,就是你用的语言的 treesitter 可以识别到你要求的这些语义。

具体判断方式 M-x treesit-explore-mode, 然后光标移动到你想要区别的节点,然后看看 tree sitter 解析出来的类型是否是不一样的。

我使用的是c语言,请问有可以供参考的配置吗

你可以先按上面我补充的方式检查一下是否能解析出来

可以的。如图

你需要按一下回车选语言才可以

输出了一大推,我目前还看不太懂

点击这些红色的部分,就可以跳转到源代码,你看看你想要区别开的内容,红色的 type 是否一样。如果是不一样,就好办,如果是一样的话,就需要写一些高亮逻辑,有些语义上的区分可能很难甚至无法写出来。

感谢大佬,我自己研究一下看看。

具体修改的方式是改 treesit-font-lock-settings。比如

(setq-local treesit-font-lock-settings
            (append
             treesit-font-lock-settings
             (treesit-font-lock-rules ... 这里写规则)))

具体可以看 treesit-font-lock-settingstreesit-font-lock-rules 的文档

好的,非常感谢,我会去看这个文档。

请问我图片中的理解是否正确?

是的,但是你可以尝试将 (declaration ) 里面的 identifier 高亮成不同的颜色

好的,我会试试,非常感谢!

试试这个,我没实际运行。

(setq-local treesit-font-lock-settings
            (append
             treesit-font-lock-settings
             (treesit-font-lock-rules
              :language 'c
              :override t
              :feature 'definition
              ;; Highlights identifiers in declarations.
              '((declaration
                 declarator: (_)
                 ;; set color here or use any face you want
                 @ansi-color-red)))))

不过原来 c-ts-mode 是用了 c-ts-mode–fontify-declarator 这个函数来做高亮的,也许写死反而不是更好的选择。你可以考虑 advice 一下这个函数。

好的,我试了一下,但是好像没有生效,我在此基础上,再根据文档调一下试试,非常感谢~~