You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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

火山引擎 最新活动