.ts ファイルを開いたとき色がつかなかったので、typescript-ts-mode を設定しました。
1. 環境とinit.elの設定
Emacs 29以降には typescript-ts-mode が標準で搭載されています1。ただしTree-sitterの文法ファイルを別途インストールしないと機能しません2。
M-x treesit-install-language-grammar は対話コマンドなので init.el には直接書けません3。代わりに treesit-language-source-alist で取得元を定義し4、未インストール時だけビルドを走らせます。
(use-package typescript-ts-mode
:ensure nil
:mode (("\\.ts\\'" . typescript-ts-mode)
("\\.tsx\\'" . tsx-ts-mode))
:init
(setq treesit-language-source-alist
'((typescript "https://github.com/tree-sitter/tree-sitter-typescript"
"master" "typescript/src")
(tsx "https://github.com/tree-sitter/tree-sitter-typescript"
"master" "tsx/src")))
(dolist (lang '(typescript tsx))
(unless (treesit-language-available-p lang)
(treesit-install-language-grammar lang))))
Code language: PHP (php)
初回起動時に文法ファイルのビルドが走ります。gcc が必要なので5、入っていない場合は事前にインストールしておきます。コード中の :ensure nil は、use-package-always-ensure t をグローバルに設定している環境でも、このパッケージをパッケージアーカイブから取得しないよう指示するキーワードです6。
- Tree-sitterサポートはEmacs本体をTree-sitterライブラリ付きでコンパイルしている場合に限り有効です。パッケージマネージャ経由でインストールしたEmacsでは無効になっているケースがあります。
M-x treesit-available-pで確認できます。 – How to Get Started with Tree-Sitter - 文法ファイルはデフォルトで
~/.emacs.d/tree-sitter/に格納されます。手動でビルドした場合も同ディレクトリに置けば読み込まれます。 – Tree-sitter – EmacsWiki use-packageマクロはEmacs 29から標準搭載されています。Emacs 28以前では別途インストールが必要です。 – use-package essentialstreesit-language-source-alistは言語名とGitリポジトリURLのペアを登録する変数です。treesit-install-language-grammarはこの変数を参照してソースを取得しビルドします。 – Setting up tree-sitter in Emacs 29.x- Tree-sitterの文法ファイルはCソースとして配布されており、インストール時にEmacsがgccを使ってネイティブライブラリにコンパイルします。gccがない場合はエラーになります。 – Compiling Emacs 29 With Tree-Sitter
typescript-ts-modeはEmacs 29に同梱されているため、package.elによるインストールは不要です。:ensure nilを指定することで、MELPAなどへの不要なアクセスを防ぎます。 – use-package User Manual – Install package