Myriad-Dreamin/tinymist
GitHub: Myriad-Dreamin/tinymist
Tinymist 是一个为 Typst 排版语言提供完整语言服务、实时预览与多格式导出的集成开发环境。
Stars: 3307 | Forks: 165
# Tinymist
[
](https://github.com/Myriad-Dreamin/tinymist/blob/main/LICENSE)[
](https://github.com/Myriad-Dreamin/tinymist/actions/workflows/ci.yml)[
](https://myriad-dreamin.github.io/tinymist/)[
](https://deepwiki.com/Myriad-Dreamin/tinymist)
Tinymist \[ˈtaɪni mɪst\] 是一个为 [Typst](https://typst.app/) \[taɪpst\] 提供的集成语言服务。在中文里,你也可以叫它微霭。
它包含:
- 一个用于 Typst 的分析库,见 [tinymist-query](/crates/tinymist-query/)。
- 一个用于 Typst 的 CLI,见 [tinymist](/crates/tinymist/)。
- 其中提供了一个用于 Typst 的语言服务器,见 [语言特性](https://myriad-dreamin.github.io/tinymist/feature/language.html)。
- 其中提供了一个用于 Typst 的预览服务器,见 [预览功能](https://myriad-dreamin.github.io/tinymist/feature/preview.html)。
- 一个用于 Typst 的 VSCode 扩展,见 [Tinymist VSCode 扩展](/editors/vscode/)。
## 功能
语言服务 (LSP) 功能:
- [语义高亮](https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide)
- “语义高亮”是对[“语法高亮”](https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide)的补充。
- [代码操作](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-code-actions)
- 也称为“快速修复”或“重构”。
- [格式化(重新格式化)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#format-source-code-in-an-editor)
- 使用 [typstfmt](https://github.com/astrale-sharp/typstfmt) 或 [typstyle](https://github.com/Enter-tainer/typstyle) 为用户提供格式化整个文档的支持。
- [文档高亮](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#highlight-all-occurrences-of-a-symbol-in-a-document)
- 高亮循环上下文中的所有断点。
- (待办) 高亮函数上下文中的所有退出点。
- (待办) 高亮闭包上下文中的所有捕获。
- (待办) 高亮文档中某个符号的所有出现位置。
- [文档链接](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentLink)
- 渲染文档中的路径或链接引用,例如 `image("path.png")` 或 `bibliography(style: "path.csl")`。
- [文档符号](https://code.visualstudio.com/docs/getstarted/userinterface#_outline-view)
- 也称为“文档大纲”或“目录”(_在 Typst 中_)。
- [折叠范围](https://burkeholland.gitbook.io/vs-code-can-do-that/exercise-3-navigation-and-refactoring/folding-sections)
- 你可以折叠代码/内容块和标题。
- [转到定义](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol)
- 右键点击一个符号并选择“转到定义”。
- 或者按 ctrl+点击一个符号。
- [引用](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol)
- 右键点击一个符号并选择“转到引用”或“查找引用”。
- 或者按 ctrl+点击一个符号。
- [悬停提示](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers)
- 也称为“悬停提示框”。
- 根据 [tidy](https://github.com/Mc-Zen/tidy) 风格渲染文档。
- [内联提示](https://www.jetbrains.com/help/idea/inlay-hints.html)
- 内联提示是出现在编辑器中的特殊标记,可为你提供有关代码的附加信息,例如所调用方法期望的参数名称。
- [颜色提供器](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-color-decorators)
- 查看文档中颜色字面量的所有内联彩色标签。
- 通过颜色选择器或其代码表示形式更改颜色字面量的值。
- [Code Lens](https://code.visualstudio.com/blogs/2017/02/12/code-lens-roundup)
- 应提供随代码显示的上下文按钮。例如,在文档开头提供一个将文档导出为各种格式的按钮。
- [重命名符号和嵌入路径](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols)
- [辅助函数和方法签名](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures)
- [工作区符号](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-all-symbol-definitions-in-folder)
- [代码操作](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-code-actions)
- 增加/减少标题级别。
- 将公式转换为“行内”、“块”或“多行块”样式。
- [experimental/onEnter](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/lsp-extensions.md#on-enter)
- 在三斜杠注释内按 Enter 会自动插入 `///`
- 在 `//` 中间或尾随空格后按 Enter 会插入 `//`
- 在 `//!` 文档注释内按 Enter 会自动插入 `//!`
- 在公式标记内按 Enter 会自动插入缩进。
额外功能:
- 保存时编译为 PDF(可配置为输入时编译或其他选项)。查看 [文档:导出文档](https://myriad-dreamin.github.io/tinymist/feature/export.html)。
- 还可通过命令、VSCode 任务或 Code Lens 编译为 SVG、PNG、HTML、Markdown、文本等格式。
- 提供对文档和模块的测试、基准测试和覆盖率收集。查看 [文档:测试功能](https://myriad-dreamin.github.io/tinymist/feature/testing.html)。
- 提供内置的代码检查。查看 [文档:代码检查功能](https://myriad-dreamin.github.io/tinymist/feature/linting.html)。
- 提供一个状态栏项,用于显示当前文档的编译状态和字数统计。
- [编辑器工具](/tools/editor-tools/):
- 在模板库中查看模板列表。(`tinymist.showTemplateGallery`)
- 在模板库中点击按钮以使用模板初始化新项目。(`tinymist.initTemplate` 和 `tinymist.initTemplateInPlace`)
- 追踪当前文档的执行情况 (`tinymist.profileCurrentFile`)。
## 版本控制与发布周期
Tinymist 的版本号遵循 [语义化版本](https://semver.org/) 规范,格式为 `MAJOR.MINOR.PATCH`。此外,tinymist 对版本号遵循以下特殊规则:
- 如果版本号带有 `-rcN` 后缀 (
),例如 `0.11.0-rc1` 和 `0.12.1-rc1`,则表示该版本是一个候选发布版本。它用于测试发布脚本和端到端 (E2E) 功能。这些版本不会发布到应用市场。
- 如果 `PATCH` 号为奇数,例如 `0.11.1` 和 `0.12.3`,则表示该版本是一个夜间发布版本。夜间发布版本将同时使用 **main 分支** 上的 [tinymist](https://github.com/Myriad-Dreamin/tinymist/tree/main) 和 [typst](https://github.com/typst/typst/tree/main)。它们将作为预发布版本发布到应用市场。请注意,在夜间发布版本中,我们会将 `#sys.version` 更改为下一个次要版本,以帮助开发具有夜间功能的文档。例如,在 tinymist 夜间版本 v0.12.1 或 v0.12.3 中,`#sys.version` 会被更改为 `version(0, 13, 0)`。
- 否则,如果 `PATCH` 号为偶数,例如 `0.11.0` 和 `0.12.2`,则表示该版本是一个常规发布版本。常规发布版本将始终使用 tinymist 和 typst 的最新稳定版本。
发布周期如下:
- 如果 Typst 版本更新,将立即发布一个新的主版本或次版本。这意味着 tinymist 将始终与 typst 的次版本保持对齐。
- 如果本周至少修复了一个 Bug 或添加了一个功能,将发布一个新的修订版本。
## 安装
按照说明在你喜欢的编辑器中启用 tinymist。
- [VS Cod(e,ium)](https://myriad-dreamin.github.io/tinymist/frontend/vscode.html)
- [Neovim](https://myriad-dreamin.github.io/tinymist/frontend/neovim.html)
- [Emacs](https://myriad-dreamin.github.io/tinymist/frontend/emacs.html)
- [Sublime Text](https://myriad-dreamin.github.io/tinymist/frontend/sublime-text.html)
- [Helix](https://myriad-dreamin.github.io/tinymist/frontend/helix.html)
- [Zed](https://myriad-dreamin.github.io/tinymist/frontend/zed.html)
## 从 GitHub 安装常规/夜间预构建版本
注意:如果你不知道什么是常规/夜间发布版本,请不要按照本节的说明操作。
除了针对各个编辑器发布的特定版本外,你还可以从 GitHub 下载最新的常规/夜间预构建版本并手动安装。
- 常规预构建版本可以在 [GitHub Releases](https://github.com/Myriad-Dreamin/tinymist/releases) 中找到。
- 夜间预构建版本可以在 [GitHub Actions](https://github.com/Myriad-Dreamin/tinymist/actions) 中找到。
- (建议)使用 [tinymist-nightly-installer](https://github.com/hongjr03/tinymist-nightly-installer) 自动安装夜间预构建版本。
- Unix (Bash):
curl -sSL https://github.com/hongjr03/tinymist-nightly-installer/releases/latest/download/run.sh | bash
- Windows (PowerShell):
iwr https://github.com/hongjr03/tinymist-nightly-installer/releases/latest/download/run.ps1 -UseBasicParsing | iex
- 其他修订版本的预构建版本也可以手动找到。例如,如果你正在寻找特定功能 [PR: build: bump version to 0.11.17-rc1](https://github.com/Myriad-Dreamin/tinymist/pull/468) 的夜间发布版本,你可以点击并转到相关提交的 [action 页面](https://github.com/Myriad-Dreamin/tinymist/actions/runs/10120639466) 运行记录并下载构建产物。
要手动安装扩展文件(带有 `.vsix` 后缀的文件),请在编辑器窗口中按下 Ctrl+Shift+X,然后将下载的 vsix 文件拖放到打开的扩展视图中。
## 文档
请参阅[在线文档](https://myriad-dreamin.github.io/tinymist/)。
## 打包
稳定版渠道:
夜间版渠道:
## 路线图
### 短期计划
为了鼓励社区贡献,我们创建了许多处于草稿状态的 [Pull Requests](https://github.com/Myriad-Dreamin/tinymist/pulls),以便为短期计划提供导航。它们可以为你在这个大型代码库中提供从何处开始着手的提示。
### 长期计划
我们计划在 typst v0.14.0 或周末的业余时间实现以下功能:
- 类型检查:完善类型检查器。
- Periscope 渲染器:由于 VSCode 拒绝渲染包含 foreignObjects 的 SVG,该功能已被禁用。
- 内联提示:由于性能问题,该功能_默认_被禁用。
- 查找字典字段和命名函数参数的引用。
- 改进符号视图的外观。
- 改进包视图。
- 在视图中点击符号名称以导航到相应符号。
- 查看本地文档时,自动在视图中定位对应的符号项。
- 记住最近调用的包命令,例如 “Open Docs of @preview/cetz:0.3.1”、“Open directory of @preview/touying:0.5.3”。
- 改进标签视图。
- 对标签进行分组。
- 搜索标签。
- 保持(持久化)分组偏好。
- 改进 Typst Preview。
- 固定下拉菜单:在不支持向预览命令传递参数的客户端中,通过下拉菜单设置要预览的文件。
- 在 Web Worker(另一个线程)中进行渲染,以减少 Electron 主线程的开销。
- 拼写检查:目前已有相关分支,但尚未找到合适的(默认)拼写检查库。
- [typos](https://github.com/crate-ci/typos) 对 Typst 来说很棒。[harper](https://github.com/Automattic/harper) 看起来也很有前景。
如果你对以上任何功能感兴趣,请随时在 [GitHub](https://github.com/Myriad-Dreamin/tinymist) 上发起 Issues 进行讨论或提交 PR 来实现它们。
## 赞助
Tinymist 在社区的关爱下蓬勃发展,并保持着引以为傲的独立性。虽然我们不接受直接的项目资金,但我们热烈欢迎大家对我们维护者的个人工作给予支持。请前往[维护者页面](/MAINTAINERS.md)和[贡献者页面](https://github.com/Myriad-Dreamin/tinymist/graphs/contributors),找到他们的个人主页以获取更多信息。也欢迎直接在 [GitHub Issues](https://github.com/Myriad-Dreamin/tinymist/issues/new) 上询问有关赞助的问题。
## 致谢
- 部分代码继承自 [typst-lsp](https://github.com/nvarner/typst-lsp)
- 所[集成](/editors/vscode#symbol-view)的**离线**手写笔迹识别器由 [Detypify](https://detypify.quarticcat.com/) 提供支持。
- 所[集成](/editors/vscode#preview-command)的预览服务由 [typst-preview](https://github.com/Enter-tainer/typst-preview) 提供支持。
- 所[集成](
标签:LSP, SOC Prime, Typst, 代码编辑器扩展, 可视化界面, 开发工具, 语言服务器协议, 通知系统