这是我的理解:
你这里require的tree-sitter 和treesit 是两个东西
- 你这里的 tree-sitter 是 emacs 外置的tree-sitter 包 (GitHub - emacs-tree-sitter/elisp-tree-sitter: Tree-sitter bindings for Emacs Lisp),这个在29.1即将引入内置tree-sitter前,就已经存在。tree-sitter-langs, global-tree-sitter-mode 等,都是这个包相关的。
- treesit 是 Emacs 29.1 (即将进入pre-test 阶段 ) 内置引入的tree-sitter (starter-guide\tree-sitter\notes\admin - emacs.git - Emacs source repository),treesit-explore-mode 是调用29.1内置的命令(你可以利用C-h f 查看该函数实现在哪里)。目前29.1内置配置的tree-sitter mode 都是 [language]-ts-mode 命名。你在一个python文件中,运行 python-ts-mode 后,就可以运行 treesit-expore-mode了。
1 个赞
book
3
我在运行M+x python-ts-mode出现以下问题:
execute-extended-command: Autoloading file /Users/apple/.emacs.d/elpa/python-0.28/python.el failed to define function python-ts-mode
python-ts-mode如何设置?
python-ts-mode 是Emacs 29.1 自带的,你需要
- 确保你的系统有tree sitter,这个和Emacs 没有关系,如何安装,可以在网上查找,或者参考上述的第二个链接。mac 系统 brew install 应该可以。
- check你的Emacs是当前支持treesit (可以调用 treesit-available-p)
- 你需要编译python对应的tree-sitter parser, 参考上个回复的第二个链接,里面有介绍如何安装。
2 个赞
book
5
我的emacs是emacs-plus@30, mac系统。是不是已经自带了python-ts-mode ?
1 个赞
这几行都可以不要了。这是老的 emacs-tree-sitter. 现在用内置的 treesit 就好。
我就下面几行配置:
(use-package treesit
:when (and (fboundp 'treesit-available-p)
(treesit-available-p))
:custom (major-mode-remap-alist
'((c-mode . c-ts-mode)
(c++-mode . c++-ts-mode)
(cmake-mode . cmake-ts-mode)
(conf-toml-mode . toml-ts-mode)
(css-mode . css-ts-mode)
(js-mode . js-ts-mode)
(js-json-mode . json-ts-mode)
(python-mode . python-ts-mode)
(sh-mode . bash-ts-mode)
(typescript-mode . typescript-ts-mode))))
这个 (setq treesit-extra-load-path '("/Users/apple/.emacs.d/tree-sitter/build-module/dist"))
也不用了。 直接把 grammar 放到你的/Users/apple/.emacs.d/tree-sitter
下就好了。
具体看文档 https://git.savannah.gnu.org/cgit/emacs.git/tree/admin/notes/tree-sitter/starter-guide
4 个赞
book
9
第2条里,如何调用 treesit-available-p?我看链接的帮助里
In the tree-sitter mode, check if we can use tree-sitter with
treesit-ready-p, it will error out if tree-sitter is not ready.
启动tree-sitter mode后python 文件中的字体颜色是有变化的。
在M+x 下并没有看到treesit-available-p命令。
是将(treesit-available-p)这行命令放在init.el文件中么?
目前将(treesit-available-p)放在其中在message 只有下面这一条信息:
tree-sitter-langs: Grammar bundle v0.12.8 was already installed; skipped
M-x 调用的是 command 命令,如果不是 interactive 的函数,那就不能通过 M-x 调用。
你应该在一个 buffer 里写下 (treesit-available-p)
然后用 C-x C-e
查看结果。或者用 M-x eval-expression。
基本功不扎实就认真读别人的回复和给到的参考资料、链接的内容。你踩的坑绝大部分人都踩过。
book
12
非常感谢各位的帮助。
我的emacs-plus@30没有内置treesit.
Debugger entered–Lisp error: (void-variable treesit-available-p)
按照链接上的intall了。在mac 下也用brew install tree-sitter.
git clone https://github.com/tree-sitter/tree-sitter.git
cd tree-sitter
make
make install
安装了tree-sitter。同时rebuild emacs-plus@30,还是没有treesit。
没太明白下面这句话的提示应该如何操作?
Then pull the tree-sitter branch (or the master branch, if it has
merged)
如果没有内置treesit,要如何安装?
你这是源码编译安装 tree-sitter,直接 brew install tree-sitter
就可以了,没必要编译的,除非你想用开发版的 tree-sitter.
然后你编译 emacs-29 或者 emacs master 就支持 tree-sitter 特性了。
那 Elisp 本身的 treesit 怎么启用呢?
已经安装了 GitHub - Wilfred/tree-sitter-elisp: tree-sitter grammar for emacs lisp grammar, 其他的语言都可以通过 xx-ts-mode 启用, Elisp 怎么在 treesit 中启用呢?
阅读了一下 treesit 的源码, 和 tree-sitter 不一样。
主要是加这一句 (add-hook 'emacs-lisp-mode-hook #'(lambda () (treesit-parser-create 'elisp)))
具体可以看我的 treesit 配置:
lazycat-emacs/init-treesit.el at ded606f063d1256cd41ad59cfd6d78b53cc383fc · manateelazycat/lazycat-emacs · GitHub
2 个赞
我了解到的信息是 Emacs 还没做 elisp-ts-mode
,因为大多数人觉得 elisp-mode
不需要用 tree-sitter
来高亮。
但是可以用treesit来做语法结构化编辑,主要我fingertip插件依赖treesit
2 个赞
xiaoC
19
请问 brew install tree-sitter
这句话具体的操作是指什么?
这个命令是用于在 macOS 系统中安装 tree-sitter 这个程序。
如果用的是 macports 这个包管理器,还可以这样安装:
sudo port install tree-sitter