2022 年 5 月 (版本 1.68)
更新 1.68.1:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Silicon | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2022 年 5 月的发行版本。此版本有许多更新,我们希望您会喜欢,其中一些关键亮点包括:
- 配置显示语言 - 以其语言查看已安装和可用的语言包。
- 问题面板表格视图 - 将错误和警告作为表格查看,以便快速按其来源进行筛选。
- 已弃用的扩展 - 了解扩展是否已弃用或应被替换。
- 扩展赞助 - 支持构建您最喜爱的扩展的开发者。
- 使用 .gitignore 隐藏资源管理器中的文件 - 重用现有的
.gitignore
来隐藏资源管理器中的文件。 - 终端颜色和对比度增强 - 查找匹配背景颜色,最小对比度比率。
- Git 分支保护 - 分支保护在 VS Code 内可用。
- TypeScript 跳转到源定义 - 直接跳转到符号的 JavaScript 实现。
- VS Code Web 版本地化 - vscode.dev 现在与您选择的浏览器语言匹配。
- 开发容器规范 - 了解有关不断发展的开发容器规范的更多信息。
- 预览:Markdown 链接验证 - 检测指向标题、图像和文件的断开链接。
如果您想在线阅读这些发行说明,请访问 Updates 上的 code.visualstudio.com。
Insiders: 想尽快尝试新功能吗?您可以下载每晚的 Insiders 版本,并在最新更新可用时立即尝试。
工作台
配置显示语言改进
已刷新配置显示语言命令以包含:
- 该语言的语言名称。
- 一个 可用语言 部分,显示您的机器上未安装哪些语言,选择一个将自动安装并应用该语言。
主题:Panda 主题
这应该有助于发现可用的语言包。请告诉我们您的想法!
问题面板表格视图
在此里程碑中,我们为用户添加了一个新功能,可以在树状视图和表格视图之间切换问题面板的视图模式。与树状视图相比,表格显示每个问题的来源(语言服务或扩展),这允许用户按其来源过滤问题。
您可以使用问题面板右上角的 以表格查看/以树状查看 按钮切换视图 UI,或者使用 问题:默认视图模式 设置 (problems.defaultViewMode
) 更改默认视图模式。
已弃用的扩展
在此里程碑中,我们在 VS Code 中添加了对已弃用扩展的支持。扩展可以被简单地弃用,或者为了支持另一个扩展而被弃用,或者当其功能内置到 VS Code 中时。VS Code 将在“扩展”视图中将扩展呈现为已弃用,如下所示。
一个不再维护的已弃用扩展。
一个为了支持另一个扩展而被弃用的扩展。在这种情况下,VS Code 不允许用户安装此扩展。
一个功能已内置到 VS Code 中,可以通过配置设置启用的已弃用扩展。
VS Code 不会自动迁移或卸载已弃用的扩展。将有一个 迁移 按钮来指导您切换到推荐的扩展。
注意:已弃用扩展的列表由 VS Code 维护。如果您认为某个扩展应该被弃用,请在此讨论中发表评论与我们联系。
赞助扩展
VS Code 现在允许用户赞助他们最喜欢的扩展。当扩展可以被赞助时,VS Code 将在“扩展”视图的“详细信息”页面中呈现一个 赞助 按钮,如下所示
赞助 按钮会将您定向到扩展的赞助 URL,您可以在其中提供支持。请参阅扩展赞助,了解如何为您的扩展选择加入此功能。
根据 .gitignore 隐藏资源管理器中的文件
文件资源管理器现在支持解析和隐藏被您的 .gitignore
文件排除的文件。可以通过 资源管理器:排除 Git Ignore (explorer.excludeGitIgnore
) 设置启用此功能。此设置与 files.exclude
一起工作,以隐藏资源管理器中不需要的文件。
注意:目前,诸如 !package.json
之类的否定全局模式无法解析。
锁定悬停位置
由于存在其他 UI 元素(例如,滚动条),某些自定义悬停很难或不可能将鼠标悬停在其上。当悬停处于活动状态时按住 Alt
现在将“锁定”它,使其具有更宽的边框,并防止鼠标在悬停外部移动而隐藏它。这主要是为了使悬停与屏幕放大镜更好地配合使用而设置的辅助功能,但它对于从悬停中复制文本也很有用。请注意,此功能仅适用于编辑器外部,因为编辑器悬停始终可以鼠标悬停在其上,除非通过 editor.hover.sticky
设置另行指定。
设置编辑器改进
“设置”编辑器现在显示特定于语言的设置的默认值覆盖指示器。您可以通过在“设置”编辑器搜索栏中添加语言筛选器来查看特定于语言的设置,方法是显式键入(@lang:javascript
)或单击搜索栏右侧的筛选器按钮,然后选择 语言 选项。
当显示默认值覆盖指示器时,表示特定于语言的设置的默认值已被扩展覆盖。该指示器还指示哪个扩展覆盖了默认值。
主题:Light Pink
此迭代还修复了当“设置”编辑器搜索栏中已经存在搜索查询时,“设置”编辑器中的某些链接未正确重定向的行为。这些链接现在也具有正确的样式,因此当鼠标悬停在它们上面时会更清晰。
<video src="/assets/updates/1_68/settings-editor-working-links.mp4" autoplay loop controls muted title="在设置编辑器中搜索单词“font”后,在目录中选择终端类别,会出现设置 terminal.integrated.fontFamily,其描述包含指向 editor.fontFamily 设置的链接。单击该链接现在可以正确地将您带到该设置。">
主题:Light Pink
注释小组件主按钮
注释小组件对第一个(最右侧)操作使用主按钮颜色
终端
查找匹配背景颜色
上个版本在终端中查找的实现是在所有匹配项周围显示边框,但这只是一个临时解决方案,直到支持动态更改单元格背景。现在,在突出显示匹配项时,彩色背景是主题的默认设置,整体体验应与编辑器类似。
如果您是采用了 terminal.findMatchBorder
或 terminal.findMatchHighlightBorder
的主题作者,我们建议您迁移到 terminal.findMatchBackground
和 terminal.findMatchHighlightBackground
,如果这样更适合主题或有助于对比度。
对比度和最小对比度比率的改进
查找匹配背景的工作在终端如何使用背景色和前景色方面增加了许多灵活性。因此,围绕终端的对比度进行了改进,使终端视觉效果更接近编辑器。此外,现在还有一个最小对比度比率功能,该功能可以动态更改文本的前景色以帮助提高可见性。
-
如果未满足对比度,亮度现在将朝另一个方向移动。例如,如果纯黑色 (#_000000) 的浅灰色背景上的深灰色文本未满足对比度,则该颜色也将尝试向白色移动,并将使用最符合所需对比度比率的值。
-
当禁用 GPU 加速时,选择现在绘制在文本下方,并支持不透明颜色。以前,这必须是部分透明的,并且会冲淡前景色。由于此更改,选择颜色现在使用与编辑器中相同的颜色。
-
Nerd 字体符号现在应应用最小对比度比率以与附近的文本融合,而 Powerline 符号和框图字符将不应用最小对比度比率,因为它们通常与没有任何前景字符的反转单元格相邻。
-
主题现在可以指定一个固定的选择前景色,以便在默认情况下用于高对比度主题。
-
修复了一些错误,使生成的前景色更加准确。
提醒一下,如果您希望保留原始颜色,可以通过设置 "terminal.integrated.minimumContrastRatio": 1
来禁用最小对比度。
任务
默认任务的全局模式
现在可以将默认的构建和测试任务限定为仅当活动文件与文件名全局模式匹配时才为“默认”任务。
{
"version": "2.0.0",
"tasks": [
{
"label": "echo txt",
"type": "shell",
"command": "echo TextFile",
"group": {
"kind": "build",
"isDefault": "**.txt" // This is a glob pattern which will only match when the active file has a .txt extension.
}
},
{
"label": "echo js",
"type": "shell",
"command": "echo JavascriptFile",
"group": {
"kind": "build",
"isDefault": "**.js" // This is a glob pattern which will only match when the active file has a .js extension.
},
}
]
}
源代码管理
Git 扩展进行了一些更新,以与我们新的 拉取请求流程保持一致。
Git:分支前缀
为了使创建新分支的过程更加顺畅,有一个新的设置 git.branchPrefix
,它指定一个字符串,在创建新分支时用作前缀。
Git:分支名称生成
一个新的设置 git.branchRandomName.enable
将使 VS Code 在每次创建新分支时建议随机分支名称。随机名称从字典生成,您可以通过 git.branchRandomName.dictionary
设置来控制字典。支持的字典有:adjectives
(默认)、animals
(默认)、colors
和 numbers
。
Git:分支保护
使用新的 git.branchProtection
设置,您可以配置要保护的特定分支。VS Code 将避免直接在受保护的分支上提交,并为您提供创建新分支进行提交的机会。您可以使用 git.branchProtectionPrompt
设置微调此行为。
GitHub:拉取请求模板支持
GitHub 扩展现在理解 拉取请求模板,并在每次从新派生的存储库创建 PR 时将其用作基础。
笔记本
单元格显示更改
我们调整了在一些情况下如何显示视口外的单元格。
当您在“大纲”视图中单击一个单元格时,如果该单元格在视口之外,则笔记本现在将滚动以在视口大约顶部 1/5 的位置显示该单元格。这与文本编辑器中“大纲”的行为一致。
当光标位于单元格编辑器中时,您可以将光标移动到编辑器第一行或最后一行之后,将其移动到下一个单元格编辑器中。现在,当将光标移动到单元格在视口之外的编辑器中时,笔记本将仅滚动足够的距离以显示编辑器中的该行,而不是跳到视口中间以显示单元格。
查找和替换支持从光标/选择中获取查询
笔记本编辑器中的查找控件现在支持从编辑器选择中获取搜索字符串。此行为由编辑器设置 editor.find.seedSearchStringFromSelection
控制。
调试
无需 launch.json 即可运行和调试
当您没有设置 launch.json
配置文件并按 F5
或在“调试”视图中选择“运行和调试”按钮时,VS Code 会根据当前活动文件中的编程语言选择调试器。如果您没有打开文件,系统会询问您要使用哪个调试器。这种体验可能会让人感到困惑,因此我们进行了一些改进。
如果某个扩展在您尝试开始调试之前已被激活,则该扩展的调试器将被排序到顶部。例如,当扩展通过先前运行该扩展的命令、打开激活该扩展的语言文件或通过您的工作区匹配的 workspaceContains
模式激活时,这可能很有用。如果您在此会话中使用过调试器,它也会被排序到顶部。
Chrome/Edge 调试器已重命名为 Web 应用 (Chrome) 和 Web 应用 (Edge),以避免与其他调试器(例如 Flutter 扩展程序)混淆,这些扩展程序也会在浏览器中运行应用。
语言
TypeScript 4.7
VS Code 现在捆绑了 TypeScript 4.7.3。这个主要的 TypeScript 版本带来了新的语言特性,包括 改进的控制流分析 和对 Node.js 中 ECMAScript 模块的支持。它还包括新的工具特性并修复了许多重要的错误!
转到源定义
VS Code 最长期且获得最多投票的功能请求之一是让 VS Code 从外部库导航到函数和符号的 JavaScript 实现。当前,转到定义会跳转到定义目标函数或符号类型的类型定义文件(.d.ts
文件)。如果您需要检查这些符号的类型或文档,这很有用,但会隐藏代码的实际实现。当前的行为也使许多不理解 .d.ts
中 TypeScript 类型的 JavaScript 用户感到困惑。
虽然将 转到定义更改为导航到符号的 JavaScript 实现听起来很简单,但此功能请求已开放如此之久是有原因的。JavaScript(尤其是许多库发布的已编译 JavaScript)比 .d.ts
更难分析。尝试分析 node_modules
下的所有 JavaScript 代码既缓慢又会大大增加内存使用量。还有许多 VS Code IntelliSense 引擎无法理解的 JavaScript 模式。
这就是新的 转到源定义 命令的用武之地。当您从编辑器上下文菜单或命令面板运行此命令时,TypeScript 将尝试追踪符号的 JavaScript 实现并导航到它。这可能需要几秒钟,我们可能并不总是得到正确的结果,但在许多情况下它应该有用。
我们正在积极改进此功能,因此请在您的代码库中尝试一下,并 分享您的反馈。
对象方法代码片段
对象方法代码片段可帮助您快速将方法添加到实现给定接口的对象文字中
在对象文字内部时,您应该看到每个可能的方法有两个建议:一个仅插入方法名称,另一个插入方法的完整签名。您还可以通过设置 "typescript.suggest.classMemberSnippets.enabled": false
或 "javascript.suggest.classMemberSnippets.enabled": false
来完全禁用对象方法代码片段。
组感知整理导入
JavaScript 和 TypeScript 的 整理导入 命令可让您快速清理导入列表。运行时,它会删除未使用的导入并按字母顺序对导入进行排序。
但是,一些代码库希望对导入的组织方式进行一定程度的手动控制。对外部导入与内部导入进行分组是这方面最常见的示例之一
// local code
import * as bbb from './bbb';
import * as ccc from './ccc';
import * as aaa from './aaa';
// built-ins
import * as path from 'path';
import * as child_process from 'child_process';
import * as fs from 'fs';
// some code...
在旧版本的 VS Code 中,在此处运行 整理导入 会导致以下结果
// local code
import * as child_process from 'child_process';
import * as fs from 'fs';
// built-ins
import * as path from 'path';
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// some code...
糟糕!发生这种情况是因为所有导入都按字母顺序排序,并且 VS Code 甚至尝试在执行此操作时保留注释和换行符。
但是,使用 TypeScript 4.7,整理导入 现在是组感知的。在上述代码上运行它看起来更像您期望的那样
// local code
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// built-ins
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
// some code...
请注意,导入现在已排序,但仍保留在其组内。好多了!
在隐式项目中启用严格 null 检查
默认情况下,对于 JavaScript 和 TypeScript,严格 null 检查 在隐式项目中启用。这应该会产生更准确的 IntelliSense 和改进的类型检查,可以捕获常见的编程错误。
此新行为仅适用于不属于 jsconfig
或 tsconfig
项目的任何文件。您可以通过设置以下内容来禁用它:"js/ts.implicitProjectConfig.strictNullChecks": false
。对于属于 jsconfig
或 tsconfig
的文件,您仍然需要在配置文件中启用严格 null 检查。
Markdown 参考链接的转到定义
现在可以在 Markdown 文件中的 参考链接 上使用 转到定义。这将从引用跳转到当前文件中的链接定义。
扩展的 JSON 模式支持
内置的 JSON 语言服务改进了对 JSON 模式草案 2019-09 和 JSON 模式草案 2020-12 的支持。使用此类模式时,不再显示警告。
仍然有一些功能未完全支持。当模式使用它们时,会显示警告。不支持的属性有
- 带有 $id 的子模式
- $recursiveRef/Anchor(草案 2019-09)
- $dynamicRef/Anchor(草案 2020-12)
VS Code Web 版
核心本地化支持
我们为 VS Code for Web 引入了初始本地化支持。VS Code 在世界各地使用,对于许多用户来说,英语不是他们的第一语言(或者他们根本不熟悉的语言!)。多年来,VS Code 用户一直在安装 来自 Marketplace 的语言包,以便使用英语以外的语言使用 VS Code。对于 VS Code for Web,我们决定采取不同的方法,这种方法更符合当今 Web 的工作方式。
对于将浏览器设置为我们核心支持语言之一的用户,vscode.dev 将会自动应用该语言的翻译。我们支持的语言记录在 vscode-loc 存储库中。
例如,要在 Microsoft Edge 中配置显示语言,您可以使用 设置 > 语言
设置完成后,当您访问 vscode.dev (或 insiders.vscode.dev)时,它将以德语显示。
主题:Panda 主题
在接下来的几个月中,我们将为扩展(包括 VS Code 自带的扩展和非自带的扩展)启用本地化,以便扩展作者也可以支持非英语用户。敬请期待!
远程存储库
当使用 远程存储库 > 继续处理... 命令将 GitHub 或 Azure Repos 存储库克隆到本地并在桌面版 VS Code 中打开时,您现在可以配置 remoteHub.gitProtocol
以始终使用 http
或 ssh
URL 进行克隆。
开发容器规范
微软和 GitHub 的开发容器团队正在积极开发新的 Dev Container Specification,并且本次迭代有一些令人兴奋的亮点。
参考实现
我们发布了一个开源命令行界面 (CLI) 作为该规范的参考实现。CLI 从 devcontainer.json
构建并启动一个开发容器,它可以直接使用或集成到产品体验中。
CLI 在新的 devcontainers/cli 存储库中提供。您可以在其 README 中了解如何入门,并在 此博客文章 中阅读更多内容。
CLI 正在积极开发中,并将继续发展以更好地支持更多场景,例如对个人用户提供更大的支持。我们很乐意在过程中听到您的反馈,因此我们 专门开了一个 issue 用于收集有关 CLI 的反馈,并欢迎在存储库中提出其他 issue 和 PR。
CI 中的开发容器
GitHub Action 和 Azure DevOps Task 可用于在持续集成 (CI) 构建中运行存储库的开发容器。这允许您重用用于本地开发的相同设置,以便在 CI 中构建和测试您的代码。有关更多详细信息,请参阅 devcontainers/ci README。
GitHub Action 的使用示例
- name: Build and run dev container task
uses: devcontainers/[email protected]
with:
imageName: ghcr.io/example/example-devcontainer
runCmd: make ci-build
Azure DevOps Task 的使用示例
- task: DevcontainersCI@0
inputs:
imageName: 'yourregistry.azurecr.io/example-dev-container'
runCmd: 'make ci-build'
sourceBranchFilterForPush: refs/heads/main
规范
该规范的积极开发仍在继续,我们已经在 devcontainers/spec 存储库中发布了初始版本。
与 CLI 一样,请继续关注进一步的更新和进展,我们很乐意听到您的反馈。
延伸阅读
您可以在 https://containers.dev 上阅读有关开发容器和规范的所有信息。
对扩展的贡献
Python
启动时不再进行解释器发现
Python 扩展现在仅在以下情况下自动触发发现:
- 使用 Python: 选择解释器 命令来选择不同的解释器。
- 首次打开特定范围(工作区或全局)。
- 未安装 Python。
由于启动时不会自动触发发现,因此这会导致瞬时加载,并加快语言服务器等其他功能的启动速度。但是,如果安装/启用了 Jupyter 扩展,则 Jupyter 仍然会在启动时触发发现。
启用本地化
Python 扩展现在支持 VS Code 支持的所有语言的翻译。我们已更新使用 vscode-nls 获取命令、通知、标题等的翻译的方式。这些翻译由本地化团队维护,以确保其是最新的和正确的。
Jupyter
Web 扩展
我们在 Jupyter 扩展的 Web 版本中支持更多核心功能方面取得了进展。
本月以下功能已移植到 Web 扩展:
- https 支持
- 内核补全
- ipywidgets
- 笔记本调试
- 变量查看
- 导出
- 交互窗口
如果您想体验此功能,请使用以下命令从本地计算机启动 Jupyter:
jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net
然后使用 vscode.dev 中的 Jupyter: 为连接指定 Jupyter 服务器 命令连接到它。
有关更多信息(和评论),请参阅此讨论 项。
远程开发
我们正在继续开发 远程开发扩展,该扩展允许您使用容器、远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
您可以在 远程开发发行说明 中了解新的扩展功能和错误修复。
GitHub 拉取请求和议题
GitHub 拉取请求和议题 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和议题。此版本的亮点包括:
- 创建拉取请求 视图中的自动合并复选框
查看扩展的 0.44.0 版本变更日志,了解其他亮点。
远程存储库扩展
GitHub 存储库 和 Azure Repos 扩展都支持 VS Code 支持的所有语言的翻译。
预览功能
Markdown 链接验证
在使用 Markdown 时,很容易错误地添加无效的文件链接或图像引用。也许您忘记了文件名使用了 -
(破折号)而不是 _
(下划线),或者您链接到的文件已移动到其他目录。通常,您只有在查看 Markdown 预览甚至发布后才会发现这些错误。VS Code 新的实验性 Markdown 链接验证可以帮助您发现这些错误。
通过链接验证,VS Code 将分析指向标题、图像和其他本地文件的 Markdown 链接。无效链接将报告为警告或错误。
VS Code 甚至可以捕获指向其他 Markdown 文件中特定标题的无效链接!
默认情况下,链接验证是关闭的。您可以通过设置 "markdown.experimental.validate.enabled": true
来尝试链接验证。
您可以使用一些设置来自定义链接验证:
-
markdown.experimental.validate.fileLinks.enabled
- 启用/禁用对本地文件的链接的验证:[link](/path/to/file.md)
-
markdown.experimental.validate.headerLinks.enabled
- 启用/禁用对当前文件中标题的链接的验证:[link](#_some-header)
-
markdown.experimental.validate.referenceLinks.enabled
- 启用/禁用对引用链接的验证:[link][ref]
。 -
markdown.experimental.validate.ignoreLinks
- 要跳过验证的链接列表。如果您链接到磁盘上不存在但 Markdown 发布后存在的链接,这将非常有用。
请告诉我们您对新功能的看法!
粘贴文件以插入 Markdown 链接
我们已添加对粘贴以在 Markdown 中插入图像或文件链接的实验性支持。
这需要同时启用 markdown.experimental.editor.pasteLinks.enabled
和 "editor.experimental.pasteActions.enabled"
。您目前可以从 VS Code 文件资源管理器中复制文件。粘贴图像文件会插入图像引用,而粘贴普通文本文件会插入指向这些文件的链接。
终端 Shell 集成
Shell 集成(使用 terminal.integrated.shellIntegration.enabled
设置启用)和命令修饰在此迭代中得到了改进和完善。
一些更新包括:
- 146377 持久化 Shell 状态,使
bash-git-prompt
和其他程序能够工作 - 148635 允许为
zsh
使用自定义ZDOTDIR
- 145801 修复装饰在较慢的机器上失去同步的问题
- 146873 改进对
bash
中现有调试陷阱的处理 - 148839 通过 它是如何工作的? 命令和选项卡悬停中的激活状态来完善消息传递
- 151223 在清除缓冲区后,确保正确跟踪命令
Windows 上的窗口控件覆盖层
我们采用了 Electron 提供的 API 来支持 Windows 上的窗口控件覆盖层。此更改面向用户的主要好处是可以在 Windows 11 中访问捕捉布局功能。由于一些持续存在的问题,默认情况下窗口控件覆盖层是关闭的,但您可以使用实验性设置 window.experimental.windowControlsOverlay.enabled
将其打开。
命令中心
我们正在添加命令中心 - 一种更简单的方式来触发用于文件、命令等的快速选择。
可以通过 window.experimental.commandCenter
设置启用此功能,请告诉我们您的想法。
合并编辑器
我们已经开始致力于改进合并体验。目前还处于早期阶段,我们尚未准备好征求反馈,但您可以通过 git.experimental.mergeEditor
来尝试。启用此功能后,具有合并冲突的文件会在新的合并编辑器中打开,从而简化冲突的解决。
我们将继续致力于此。使用 Insiders 来关注我们的进展。我们衷心感谢 Mingpan 和我们在 Google 的朋友,他们正在帮助我们完成这项工作。❤️
扩展编写
内联补全最终确定
我们已完成内联补全 API 的最终版本。这允许扩展程序提供与建议小部件分离的内联补全。内联补全的渲染效果就像它已经被接受一样,但使用灰色颜色。用户可以使用 Tab
键在建议之间循环并接受它们。一个使用内联补全的扩展示例是 GitHub Copilot。更多信息可以在 vscode.d.ts
文件中找到,API 的入口点是 languages.registerInlineCompletionItemProvider
。
输入框验证消息严重性最终确定
我们的输入框 API(通过 window.showInputBox
和 window.createInputBox
)在用户输入验证中提供严重性 已最终确定。
例如,如果您想根据用户的输入向其显示信息消息,您的验证消息可以返回
{
message: 'this is an info message';
severity: InputBoxValidationSeverity.Info;
}
它看起来会像这样
Notebook 编辑器 API
新的 Notebook 编辑器 API 引入了一个新的 NotebookEditor
类型,它类似于 TextEditor
,但适用于Notebook,而不是普通的文本编辑器。
const editor = vscode.window.activeNotebookEditor;
if (editor) {
// Access the underlying notebook document associated with the editor
console.log(editor.notebook.uri);
// Change the selection in the current notebook
editor.selection = new vscode.NotebookRange(1, 3);
}
您可以使用 window.activeNotebookEditor
获取当前 Notebook 编辑器,并使用 window.onDidChangeActiveNotebookEditor
等事件来观察用户何时切换到新的 Notebook 编辑器。
基于时间线视图的扩展激活
当时间线视图可见时,已添加新的激活事件。此事件 onView:timeline
可以被任何扩展使用,但对于实现建议的 Timeline
API 的扩展最有用。
UX 指南
扩展作者的 UX 指南 已更新和扩展,以涵盖更多 VS Code 用户界面元素。
修订后的 概述页面逐步介绍了 VS Code UI,以直观地展示界面和常用 UI 元素。
相关指南、API 参考和扩展示例的链接已添加到每个区域的专用页面。此外,所有示例图像都已在整个指南中更新,以展示 UI 的最新版本。
现在您可以阅读关于为添加到或贡献这些 UI 元素的扩展程序提供的建议和不建议的操作:
扩展赞助
在此里程碑中,我们在扩展的 package.json
中引入了一个 sponsor
字段,以允许扩展选择参与赞助。sponsor
对象有一个 url
字段,用于扩展作者的赞助链接。例如
"sponsor": {
"url": "https://github.com/sponsors/nvaccess"
}
如果扩展选择参与,VS Code 将在“扩展”视图的“详细信息”页面中渲染一个“赞助”按钮,如上面的 赞助扩展 部分所示。
注意:请确保使用最新的 vsce 命令行工具(>=2.9.1
)发布启用了赞助的扩展。
建议的 API
每个里程碑都附带新的建议 API,扩展作者可以尝试使用它们。与往常一样,我们希望收到您的反馈。以下是尝试使用建议 API 的步骤
- 查找您想尝试的提案,并将其名称添加到
package.json#enabledApiProposals
中。 - 使用最新的 vscode-dts 并运行
vscode-dts dev
。它会将相应的d.ts
文件下载到您的工作区。 - 您现在可以针对该提案进行编程。
您不能发布使用建议 API 的扩展。下一个版本中可能会有重大更改,我们永远不想破坏现有的扩展。
从 DataTransfer 读取文件
新的 dataTransferFiles
API 提案允许扩展程序从 vscode.DataTransfer
对象读取文件。DataTransfer
类型由树拖放 API,以及拖放到编辑器和复制粘贴 API 提案使用。
export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {
...
public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {
// Get a list of all files
const files: vscode.DataTransferFile[] = [];
sources.forEach((item) => {
const file = item.asFile();
if (file) {
files.push(file);
}
});
const decoder = new TextDecoder();
// Print out the names and first 100 characters of the file
for (const file of files) {
const data = await file.data();
const text = decoder.decode(data);
const fileContentsPreview = text.slice(0, 100);
console.log(file.name + ' — ' + fileContentsPreview + '\n');
}
...
}
}
文件数据传输项目前仅在它们来自 VS Code 外部时才添加到 DataTransfer
中(例如,当您从桌面拖放到树视图或编辑器中时)。
复制粘贴 API
新的 documentPaste
API 提案允许扩展程序挂钩到文本编辑器内的复制和粘贴。这可以用来修改粘贴时插入的文本。您的扩展程序还可以在复制文本时存储元数据,并在粘贴时使用此元数据(例如,在两个代码文件之间粘贴时携带导入)。
文档粘贴扩展示例展示了此 API 的实际应用。
/**
* Provider that maintains a count of the number of times it has copied text.
*/
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';
private count = 0;
prepareDocumentPaste(
_document: vscode.TextDocument,
_range: vscode.Range,
dataTransfer: vscode.DataTransfer,
_token: vscode.CancellationToken
): void | Thenable<void> {
dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
}
async provideDocumentPasteEdits(
_document: vscode.TextDocument,
range: vscode.Range,
dataTransfer: vscode.DataTransfer,
token: vscode.CancellationToken
) {
const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
if (!countDataTransferItem) {
return undefined;
}
const textDataTransferItem = dataTransfer.get('text/plain') ?? dataTransfer.get('text');
if (!textDataTransferItem) {
return undefined;
}
const count = await countDataTransferItem.asString();
const text = await textDataTransferItem.asString();
// Build a snippet to insert
const snippet = new vscode.SnippetString();
snippet.appendText(`(copy #${count}) ${text}`);
return new vscode.SnippetTextEdit(range, snippet);
}
}
vscode.languages.registerDocumentPasteEditProvider(
{ language: 'markdown' },
new CopyCountPasteEditProvider()
);
新的 Notebook 工作区编辑提案
新的 notebookWorkspaceEdit
API 提案允许扩展程序编辑 Notebook 的内容。它取代了之前的 notebookEditorEdit
提案。
通过该提案,您可以创建工作区编辑,以插入、替换或修改 Notebook 中的单元格
const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
const edit = new vscode.WorkspaceEdit();
edit.set(
currentNotebook.uri,
vscode.NotebookEdit.insertCells(/* index*/ 1, [
// ... new notebook cell data
])
);
await vscode.workspace.applyEdit(edit);
}
工程
使用拉取请求
我们已不再直接将更改推送到 vscode 存储库的 main
分支,现在仅使用拉取请求 (PR) 将所有更改推送到 VS Code。我们要求每个 PR 至少获得另一位团队成员的批准。利用这一点,我们现在还要求在可以合并 PR 之前通过一些基本检查。这些任务包括 TypeScript 编译、格式化规则、单元测试和集成测试,通常不会超过 10 分钟。切换到此流程减少了我们的 Insiders 构建因编程错误而中断的次数。
VS Code OSS 构建
我们有一个新的公共 Code OSS 构建,它重用了与我们的生产构建相同的构建定义。此构建现在在每个 PR 上运行不到 30 分钟,我们计划继续投资以加快它的速度。
文档
更新的版本控制视频
重新制作了 在 Visual Studio 中使用 Git 入门视频,以帮助您开始使用 VS Code 中内置的 Git 集成。
您还可以在 VS Code YouTube 频道上找到其他精彩视频。
vscode.dev 在 code.visualstudio.com 上
想使用 VS Code Web 版,但忘记了 URL?现在,在 VS Code 的 下载页面上醒目地显示了 vscode.dev,以便您可以快速开始在浏览器中运行 VS Code。
重要修复
感谢
最后但同样重要的是,非常感谢 VS Code 的贡献者。
Web 扩展
扩展作者启用了作为Web 扩展运行代码的扩展(以下列表为 2022 年 5 月 2 日至 6 月 6 日之间)
- Pipeline Editor (Alexey Volkov)
- Markdown Base64 Image ID (amoxuk)
- Apache Daffodil VS Code Extension (Apache Software Foundation)
- Web Search (Ben Rogers)
- CloudStudio.coding (CloudStudio)
- Screenshot Clipboard (Darren Daniel Day)
- Galaxy Workflows (davelopez)
- React Snippets (dotkiro)
- Draw (hall)
- Blogging tool (Huka)
- Katalon Runner (Katalon Studioz)
- zzzGCS-Uploader (KillerBees)
- WhatTheCommit (Lasse Gaardsholt)
- TEI Japanese Editor (ldas)
- TypeScript Error Translator (Matt Pocock)
- Mintlify (Mintlify)
- Play DJMAX (minwook-shin)
- Sciter JS (MustafaHi)
- NewWeb (newsearchwebtesting)
- Loop Development Kit (Olive AI)
- Chewbacca (Otter)
- Grammarly (Rahul Kadyan)
- Reflame (Reflame)
- SAS (SAS Institute Inc.)
- vscode-solidity (sevillal)
- Slint (夜间版) (Slint)
- Markdown 图像 (Steven Gourley)
- 智能排序 (Suguru Yamamoto)
- fiber-ifttt-starlark (t-codespaces)
- Markdown 预览样式(测试版) (TakumiI)
- VS Code 版 TATEditor (TATEditor)
- kodeine (tored)
- Vue 语言特性 (Volar) (Vue)
- Watermelon (WatermelonTools)
- todoist (Waymondo)
- 排列选择 (Wupb)
- 瞬态 Emacs (yasuyuky)
- 跳转到下一个错误 (yy0931)
- 额外命令 (zardoy)
问题跟踪
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Simon Chan (@yume-chan)
拉取请求
对 vscode
的贡献
- @a-stewart (Anthony Stewart): 解决 Webview 定位错误的方案 PR #137506
- @aifreedom (Song Xie)
- 使用正确的区域设置格式化日期字符串 PR #150133
- 修复日志字符串中 “synchronizing” 的拼写错误 PR #150236
- @AlbertHilb: 将一个共享的
macros
对象传递到每个 katex 渲染器调用中 PR #148006 - @andrewbranch (Andrew Branch)
- [typescript-language-features] 将
flags
添加到补全遥测 PR #148313 - [typescript-language-features] 字符串补全没有提交字符 PR #148597
- [typescript-language-features] 将
- @bl-nero (Bartosz Leper): 修复反汇编视图中的无限循环 PR #148556
- @CGNonofr (Loïc Mangeonjean)
- 在 monaco 编辑器上添加高对比度亮色主题 PR #148249
- 在 monaco api 中添加编辑器监视方法 PR #148777
- @dlech (David Lechner): 允许 ICodeEditor.restoreViewState() 中为 null PR #146866
- @eugenesimakin (Eugene): 为建议小部件继承 editor.letterSpacing (修复 #125622) PR #148283
- @gjsjohnmurray (John Murray): 在 Git SCM 视图中的文件上下文菜单中添加“打开包含文件夹”等 PR #149150
- @holazz (zz): 将“pnpm-lock.yaml”添加到“package.json”的子模式中 PR #146869
- @ilumer (ilumer): 修复 build/npm/preinstall.js 节点版本检查 PR #150547
- @jasonwilliams (Jason Williams): 在任务中启用 glob,否则回退到默认值 - 修复 #88106 PR #141230
- @jeanp413 (Jean Pierre)
- 为 markdown 链接启用转到定义 PR #148017
- 修复如果未在退出时聚焦,则终端拆分宽度不会持久化的问题 PR #149594
- @justanotheranonymoususer: 将扩展输出标签添加到 url PR #150065
- @Lazyuki: 在 monarchLexer 中检查 maxTokenizationLineLength PR #145979
- @Long0x0: 修复渲染空格时出现的不正确连字 PR #150349
- @MachineMitch21 (Mitch Schutt): 编辑器拖放目标调试阈值方块清理 PR #149570
- @Mingpan: [未完善的原型] Git 的三向合并 PR #150388
- @PF4Public: 更改 extensions/markdown-math 中的依赖语法 PR #149501
- @pksunkara (Pavan Kumar Sunkara): feat: 内嵌提示 displayStyle PR #150118
- @prashantvc (Prashant Cholachagudda): 将扩展搜索文本长度添加到遥测 PR #148785
- @quanzhuo (Quan Zhuo): 在 JavaScript 中添加 newpromise 代码片段 PR #148755
- @r3m0t (Tomer Chachamu): 修复来自错误提供程序的访问令牌 PR #150473
- @Raymo111 (Raymond Li): 修复拼写错误 PR #149509
- @remcohaszing (Remco Haszing): 指定 tsconfig.tsbuildinfo 为 json PR #149065
- @robinkar (Robin Karlsson): 接受 Web 中 HTTP 升级标头的大小写 PR #150961
- @roj1512 (Roj): 创建 PR 时处理多行提交消息 PR #149426
- @ShenHongFei (沈鸿飞): 除了 WebviewPanel 之外,让 WebviewView 也支持 TypedArrays 的传输 PR #148429
- @susiwen8 (susiwen8): 修复: 关闭
创建分支
消息将创建分支 PR #148438 - @weartist (Han): 修复 #130527 PR #146710
- @wkillerud (William Killerud): 为 SassDoc 文档添加 onEnterRule PR #150599
- @yhatt (Yuki Hattori): 修复 #147936 PR #148503
对 vscode-extension-samples
的贡献
- @KamasamaK: 删除未使用的 enableProposedApi PR #609
对 vscode-generator-code
的贡献
- @segevfiner (Segev Finer): 从 vscode-webpack 模板中删除 $tslint-webpack-watch PR #346
对 vscode-html-languageservice
的贡献
- @hahn-kev (Kevin Hahn):允许在数据提供程序中指定空元素 PR #125
对 vscode-js-debug
的贡献
- @ashgti (John Harrison):添加对索引源映射的支持。 PR #1261
对 vscode-languageserver-node
的贡献
- @d-biehl (Daniel Biehl):清理 DiagnosticRequestor 中的诊断 PR #976
- @DanTup (Danny Tuppeny)
- @heejaechang (Heejae Chang):确保取消订阅文件事件 PR #929
- @Vtec234 (Wojciech Nawrocki):修复:当
showDocument
失败时返回false
PR #951
对 vscode-pull-request-github
的贡献
- @jpspringall:Issue #3371 | 更新了 GitHub Enterprise AuthProvider 的 getAuthSessionOptions PR #3565
对 debug-adapter-protocol
的贡献
- @apupier (Aurélien Pupier)
- @lemmy (Markus Alexander Kuppe):将 TLA+ 添加到 debug-adapter-protocols 列表中 PR #267
对 language-server-protocol
的贡献
- @asashour (Ahmed Ashour)
- @KamasamaK
- @michaelmesser (Michael Messer):更新 index.html 中的最新版本 PR #1478
- @pedro-w (Peter Hull):在文件末尾添加换行符 PR #1486