如何在Doom Emacs中正确关联.omnijs文件与typescript-ts-mode?
解决Doom Emacs中.omnijs文件的TypeScript LSP与OmniJS类型支持问题
1. 让Eglot自动为.omnijs文件启动服务
你当前的配置仅能让.omnijs文件切换到typescript-ts-mode,但Eglot默认不会自动为该模式下的.omnijs文件启动语言服务。在$DOOMDIR/config.el中添加以下配置,确保Eglot在typescript-ts-mode激活时自动启动:
(add-hook 'typescript-ts-mode-hook 'eglot-ensure) ;; 明确指定Eglot使用TypeScript语言服务处理相关模式 (add-to-list 'eglot-server-programs '((typescript-ts-mode javascript-ts-mode) . ("typescript-language-server" "--stdio")))
2. 让TypeScript LSP识别.omnijs文件
TypeScript语言服务器默认不把.omnijs后缀当作TypeScript文件处理,需要在项目根目录的tsconfig.json中添加扫描规则,同时确保能加载到omnifocus.d.ts类型定义:
{ "include": [ "**/*.ts", "**/*.omnijs" // 将.omnijs文件纳入TS编译扫描范围 ], "compilerOptions": { "target": "ES6", "module": "ESNext", "strict": true, "typeRoots": ["./"] // 确保LSP能找到当前目录下的类型定义文件 } }
3. 强制缓冲区按TypeScript规则解析
如果上述配置仍不生效,可为.omnijs文件单独设置缓冲区变量,让Eglot明确按TypeScript规则处理:
(add-hook 'typescript-ts-mode-hook (lambda () (when (string-match-p "\\.omnijs\\'" (buffer-file-name)) (setq-local eglot-language-id "typescript") ;; 重启Eglot加载新配置 (eglot-shutdown) (eglot-ensure))))
4. 验证配置效果
修改完成后重启Doom Emacs,打开.omnijs文件:
- 检查模式栏是否出现
EGLOT标记,确认语言服务已启动 - 输入
Application等OmniJS对象,验证是否能触发类型提示与代码补全
内容的提问来源于stack exchange,提问作者K G




