笔记本,Visual Studio Code 风格
2021 年 11 月 8 日,作者 Tanha Kabir,@_tanhakabir
笔记本是包含丰富的 Markdown、可执行代码片段和配套丰富输出的混合文档。这些都分隔成不同的单元,可以按任何顺序交织在一起。
如果您不熟悉笔记本,您可能熟悉 REPL(读-求值-打印循环)?REPL 是一个交互式应用程序,您可以在其中编写几行代码并立即执行代码,并查看输出。笔记本是 REPL 的典范,让您快速创建可以迭代和处理代码小块的环境。
笔记本不仅是出色的 REPL,而且还是出色的讲故事工具,让您可以将 Markdown 元素(如图像、数学方程式和解释性文本)与您的代码交织在一起。笔记本是与同事或公众社区分享和解释您的想法的完美方式。
如今最流行的笔记本形式是 Jupyter Notebook,它在数据科学界得到广泛使用,并具有丰富的 Python 支持。Jupyter Notebook 还通过 Jupyter 内核支持其他语言,例如 Julia 或 R,内核是遵循特定协议以在您的笔记本中运行代码的可执行文件。Visual Studio Code 多年来一直支持 Jupyter Notebook,但最近在 VS Code 核心添加了本机笔记本支持。
VS Code 中的笔记本支持
没错,笔记本现在是 VS Code 核心功能的一部分!这意味着 VS Code 中现在提供了笔记本 API,让扩展作者可以创建自己的笔记本体验。任何人都可以制作支持自定义语言和丰富输出的 VS Code 笔记本扩展,创建笔记本与创建任何其他扩展没有区别。
在笔记本 API 出现之前,VS Code 中的 Jupyter Notebook 支持完全来自Jupyter 扩展。该扩展在隔离的 webview 中创建其笔记本体验,有点像 VS Code 中的独立网页,无法与您安装的任何其他扩展通信。
但是,现在有了核心笔记本 API,笔记本支持来自 VS Code,而不是隔离的 webview。这意味着笔记本扩展可以与 VS Code 的其他部分和其他扩展进行交互。例如,Rainbow Indent 等编辑器扩展将在您的笔记本的代码单元中起作用。
笔记本 API 不限于 Jupyter Notebook,因为我们相信还有许多其他领域可以从拥有一个工具中受益,该工具可以帮助您迭代和讲述您的代码。我们公开发布了新的笔记本 API,以便任何扩展作者都可以制作自己的自定义笔记本。
笔记本扩展生态系统的开始
下一节将介绍我们在验证笔记本 API 时开发的两个自定义笔记本。
GitHub 问题笔记本
VS Code 团队创建的第一个笔记本体验是GitHub 问题笔记本。它是一个笔记本,可以帮助我们对 GitHub 中的数千个问题进行分类和组织。使用此笔记本,我们可以同时检查多个存储库,以使用诸如“查找标记为bug
并分配给我的所有问题”之类的查询查找问题。VS Code 团队每天使用此笔记本处理团队处理的众多存储库中的问题。
您可以在VS Code 存储库的.vscode/notebooks
下找到我们用于分类的特定笔记本。有一个名为inbox.github-issues
的笔记本用于将新问题分类到其适当的区域和分配者。
GitHub 问题笔记本在 VS Code Marketplace 上提供,供任何人使用。您可以通过安装扩展、为您的笔记本创建带有.github-issues
文件扩展名的文件(例如my-notebook.github-issues
),然后创建诸如以下查询来尝试它:
$repo=repo:microsoft/vscode-github-issue-notebooks
$repo is:open no:assignee
用于创建查询的笔记本语言github-issues
几乎与 GitHub.com 上使用的语法相同。GitHub 问题笔记本语言中增加的一项功能是它允许您创建变量并在任何其他单元中使用它们。
您可以查看GitHub 上的 GitHub 问题笔记本的源代码。
REST 书籍
受 GitHub 问题笔记本中查询体验的启发,当我第一次加入 VS Code 团队时,我创建了REST 书籍作为一项学习练习。REST 书籍允许您在笔记本中进行 HTTP 调用。我发现 REST 书籍对于迭代带有服务器的项目很有用,因为能够随着时间的推移进行多次调用并在一个页面上轻松比较结果。我还使用 REST 书籍笔记本对我的项目进行一些手动测试,并将文档与测试用例交织在一起。
此 REST 书籍扩展今天也已在 Marketplace 上提供。您可以安装REST 书籍扩展,创建以.restbook
结尾的文件,然后执行任何 HTTP 查询,例如GET github.com
。
起初,开发 REST 书籍对我来说似乎很复杂,但由于有大量可用的 VS Code API,编程和创建 REST 书籍比我预期的要容易得多。最值得注意的是,我大量使用了语言 API 来为我的自定义 REST 查询语言提供语法突出显示和自动完成。然后,使用笔记本 API,我只需要填写用户想要运行查询时应该执行的操作。
您可以在此处查看 REST 书籍的源代码。
对于这两个笔记本,拥有 VS Code 笔记本 UI 来创建这些 REPL 类体验真是太棒了。您不必担心创建和维护自己的 UI,您只需专注于功能即可。
创建自己的自定义笔记本扩展
观看编码教程
几个月前,VS Code 团队录制了一场关于自定义笔记本的直播,我在其中现场演示了创建自定义笔记本扩展的流程。您可以在 YouTube 上观看它:VS Code 笔记本:深入探究。自视频发布以来,一些笔记本 API 已经改变,但原理仍然相同。
当您准备好构建自己的笔记本扩展时,有关最新和最详细的信息,您可以参考笔记本扩展作者指南。
与社区分享您的想法
如果您对创建自己的笔记本扩展不感兴趣,但有关于有用应用程序的想法,我们鼓励您在 VS Code Twitter 帐户@code 上发布笔记本想法,或在VS Code GitHub 存储库中创建问题。这将使 VS Code 社区阅读和讨论您的笔记本想法,并希望激发人们将您的笔记本变成现实!
我们在本博客中介绍的几个自定义笔记本仅仅是开始!我们很高兴看到您将激发和创造哪些自定义笔记本体验!
编码愉快!
Tanha Kabir (@_tanhakabir) 和 VS Code 团队 (@code)