2022 年 1 月(版本 1.64)
更新 1.64.1:此更新解决了这些安全问题。
更新 1.64.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2022 年 1 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 新的侧边栏 - 使用新的侧边栏一次显示更多视图。
- 设置编辑器搜索 - 搜索现在优先考虑全字匹配。
- 音频提示 - 当光标移动到折叠区域、错误和断点时听到提示音。
- Unicode 高亮改进 - 避免在高亮显示受支持语言中的字符。
- 自动终端回复 - 为常见的终端提示创建自动回复。
- 笔记本 UI 改进 - 在 Markdown 和输出单元格中搜索文本。
- 调试二进制数据视图 - 在调试时查看和编辑二进制数据。
- Markdown 路径智能感知 - 快速插入相对文件路径和标题链接。
- JS/TS 代码片段环绕 - 将选定的代码插入代码片段中。
- VS Code for the Web - 支持 vscode.dev 和 github.dev 中已签名的 GitHub 提交。
如果您想在线阅读这些发行说明,请访问 Updates 上的 code.visualstudio.com。
观看 VS Code 团队发布派对上此版本新功能的亮点。您可以在我们的 YouTube 频道上找到活动录像。
Insiders:想要尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。
工作台
新的侧边栏
在此里程碑中,我们引入了侧边栏,这是工作台中与侧边栏相对的新表面,您可以在其中放置来自侧边栏或底部面板的视图。与将底部面板移动到编辑器的左侧或右侧不同,新的侧边栏与底部面板协同工作,因此您可以一次看到更多组视图。
要使用侧边栏,您需要将一些视图移到其中。根据我们最受投票的功能请求之一,您可能希望将大纲视图从侧边栏移动到侧边栏。您可以通过将视图拖放到侧边栏中来完成此操作。如果侧边栏未打开,就像底部面板一样,将视图拖到编辑器区域的边缘会将其弹出。
在下面的短视频中,大纲视图被拖到右侧并放下以创建侧边栏。然后,用户可以在侧边栏中切换视图(此处打开全局搜索视图),同时保持大纲视图可见。
或者,您可以使用命令面板中的 移动视图 命令,该命令将显示可用视图的下拉列表。当您选择一个视图时,您可以选择位置,方法是创建新的面板/侧边栏/侧边栏条目,或将视图放置在现有位置,例如资源管理器或源代码管理。
可以通过抓住视图图标在面板、侧边栏和侧边栏之间拖放视图。您可以通过右键单击视图图标并选择 重置位置 将视图的位置重置为其默认值。
如果您想将所有视图重置回默认布局,您可以从命令面板运行 视图:重置视图位置。
替换面板位置
如上所述,新的侧边栏提供了与将面板移动到左侧或右侧类似的功能,但通过不移动原始面板的整个内容而对此进行了改进。除了面板之间的视图拖放之外,新的侧边栏正在取代移动底部面板的选项。
鉴于此,我们已弃用 workbench.panel.defaultLocation
设置以及 移动面板 命令,而支持类似的命令
- 将视图从面板移动到侧边栏 (
workbench.action.movePanelToSidePanel
) - 将视图从侧边栏移动到面板 (
workbench.action.moveSidePanelToPanel
)
旧的 移动面板 命令已重新映射到提供类似行为的新命令。即使使用此映射,我们也建议将您的键盘快捷键更新为新命令。
下面,整个底部面板被移动到侧边栏,然后再移回原始面板位置。
面板对齐
为了解决另一个流行的功能请求,我们添加了一个名为面板对齐的新布局选项。此选项允许您配置底部面板在窗口中跨越的宽度。有四个选项
- 居中 - 这是经典行为。面板仅跨越编辑器区域的宽度。
- 左侧 - 面板将从窗口的左边缘跨越到编辑器区域的右边缘。
- 右侧 - 面板将从窗口的右边缘跨越到编辑器区域的左边缘。
- 两端对齐 - 面板将跨越窗口的完整宽度。
请注意,对于所有选项,活动栏都被视为窗口的边缘。
您可以在 查看 > 外观 > 对齐面板 下的菜单中或使用新的 设置面板对齐方式为... 命令配置这些选项。
自定义布局控件
有了所有这些新的布局选项,我们一直在探索更好地公开布局配置以提高可发现性和易用性的方法。这就是为什么您可能会在标题栏中注意到一个新的实验性 配置布局 按钮。这仅在您的 window.titleBarStyle
设置为 custom
(Windows 和 macOS 上的默认设置)且 workbench.experimental.layoutControl.enabled
设置为 true
时出现。按钮可见性由实验控制,但如果您想手动启用它,您可以通过在设置编辑器中应用这些设置值来完成(⌘,(Windows、Linux Ctrl+,))。
菜单的内容仍在处理中,但目前您应该看到切换侧边栏、面板和侧边栏的功能。此外,您将看到一个用于新命令 自定义布局 的条目。这个新命令触发了一个新的交互式快速选择体验,允许您在一个地方控制布局配置的所有方面。
试用一下,如果您有任何反馈,请在 问题 #137633 中告知我们。
设置编辑器
设置编辑器搜索现在在搜索时查找字符串和枚举设置中的字符串值匹配项。
新的搜索算法还优先考虑全字匹配,这意味着如果同时安装了 Java 和 JavaScript 扩展,则在搜索“java”时,Java 设置将首先显示。
最后,设置编辑器中的下拉列表(例如 files.autoSave
的下拉列表)和列表小部件(例如 files.associations
的列表小部件)现在可以与触摸屏设备一起使用。
设置同步
设置同步现在支持同步用户任务。
默认设置同步计算机名称现在在 VS Code for the Web 中包含浏览器和产品名称。
资源管理器:确认并禁用撤消
文件资源管理器长期以来一直支持撤消堆栈,以还原文件和文件夹编辑(重命名、剪切/复制/粘贴、移动、导入等)。一些用户发现此功能出乎意料,因此现在有一个设置可以禁用资源管理器中的撤消 (explorer.enableUndo
)。
此外,添加了一个新设置 (explorer.confirmUndo
) 来配置资源管理器在执行撤消时提示确认的频率。默认情况下,资源管理器将比以前更频繁地提示,以确保不会意外发生破坏性撤消,但这可以更改为旧的行为,值为 "light"
,或设置为 "verbose"
以在所有撤消操作之前提示。
编辑器
音频提示
音频提示指示当前行是否具有某些标记,例如错误、断点或折叠的文本区域。
当主光标更改其行或第一次将标记添加到当前行时,将播放音频提示。当连接屏幕阅读器时,音频提示会自动启用,但也可以通过将 audioCues.enabled
设置为 on
来手动开启。
更多音频提示即将推出,我们将迭代声音设计。
Unicode 高亮改进
为了改进 11 月版本中引入的 Unicode 高亮功能,有一些新设置可以更好地处理误报。
新的设置 editor.unicodeHighlight.allowedLocales
可用于允许在一个或多个配置的区域设置中常见的字符。默认情况下,这包括当前的 VS Code 显示语言和当前的操作系统语言。目前,仅支持在 vscode-loc 语言包中翻译的区域设置。
设置 editor.unicodeHighlight.includeStrings
控制是否应高亮显示字符串中的字符。该值默认为 true
,但可以设置为 false
以忽略字符串。
编辑器折叠限制
新的设置 editor.foldingMaximumRegions
允许用户更改编辑器中显示的最大折叠范围数。默认情况下,限制为 5000。请注意,更大的数字可能会导致性能下降。
编辑器适应语言功能计时
扩展为几乎所有语言功能提供支持,包括内置功能,如折叠区域、CodeLens、内嵌提示和语义标记。这些功能不是由用户手势触发的,而是由键入触发的,通常在超时后触发。例如,CodeLens 会在您键入时更新,语义标记也是如此。选择的超时值是固定的,或多或少是任意的。在此版本中,编辑器会适应观察到的计时,以便较慢的机器或网络连接不会被请求淹没,而更快的机器可以得到更好的利用。
终端
自动回复
终端现在具有一个选择加入功能,可以在收到特定字符序列时自动回复。一个很好的例子是 Windows 批处理脚本消息 Terminate batch job (Y/N)?
,在运行批处理脚本时按 Ctrl+C
后出现。要让终端在 Windows 中按 Ctrl+C
时自动回复 Y
并输入(\r
),请添加以下设置
"terminal.integrated.autoReplies": {
"Terminate batch job (Y/N)?": "Y\r"
}
主题:Sapphire
您可以为其他内容设置自定义回复,但在执行此操作时要小心,因为您正在自动向进程发送文本。例如,您可以使用它在提示时自动更新 Oh My Zsh
"terminal.integrated.autoReplies": {
"[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}
如果您使用 Clink 并启用其类似功能,您可以在 Clink 或 VS Code 中通过将回复设置为 null
来禁用它,以避免两个功能相互冲突
"terminal.integrated.autoReplies": {
"Terminate batch job (Y/N)": null
}
增强的 VT 支持
添加了对操作系统命令 (OSC) 4/10/11/12 转义序列的支持,使应用程序能够控制终端的主题颜色。
键盘可导航链接
以前,终端中的链接导航需要使用鼠标。现在,仅使用键盘即可通过以下命令打开链接
- 终端:打开上次 Web 链接... 例如,
https://github.com/microsoft/vscode
- 终端:打开上次文件链接... 例如,
/Users/user/repo/file.txt
- 终端:打开检测到的链接... 查看所有链接(Web、文件、单词)
源代码管理
对存储库发现的更多控制
根据社区反馈,有两个新设置可以更好地控制 Git 存储库的发现过程,并适应更多样化的文件夹结构。
git.repositoryScanMaxDepth
- 控制扫描时使用的深度。git.repositoryScanIgnoredFolders
- 控制扫描期间应忽略的文件夹列表。
更改列表排序改进
新的设置 (scm.defaultViewSortKey
) 控制用于源代码管理视图中更改列表的默认排序键。排序键的选择也会为每个文件夹/工作区记住。
选项包括
name
- 按文件名对更改进行排序。path
- 按文件路径对更改进行排序(默认)。status
- 按源代码管理状态对更改进行排序。
您需要重新加载 VS Code 窗口才能应用设置更改。
新的 Git 暂存命令
命令面板中添加了一个新命令 Git:删除所有暂存...,允许用户清除所有暂存条目。与任何具有永久后果的 Git 操作一样,请谨慎使用此命令。
Git 输出 - git 命令执行时间和持续时间
为了帮助跟踪性能问题,Git 输出通道现在显示 git 命令的执行时间以及命令的持续时间,不包括生成子进程所花费的时间。
笔记本
在渲染的 Markdown 和代码单元格输出中查找文本
VS Code 现在支持在 Markdown 单元格的渲染视图和代码单元格的输出中查找文本。此功能默认情况下处于禁用状态,因为它需要渲染所有 Markdown 单元格和输出,这在打开笔记本时可能会非常耗时。您可以通过从“查找”控件输入框上的过滤器下拉列表中选择选项(Markdown 预览,代码单元格输出)来启用此功能。
目前,在输出中搜索文本时存在一些限制。例如,您无法搜索 VS Code 本身渲染的流式/文本输出。我们计划在下一次迭代中改进这一点。
单元格折叠 UI
笔记本单元格的左侧有一个蓝色条,指示它们处于焦点状态。此条现在是交互式的 - 您可以单击顶部以折叠单元格输入,单击底部以折叠输出。
Markdown 单元格折叠提示
当 Markdown 单元格区域已折叠时,将显示一条消息,其中包含折叠单元格的数量,以更清楚地表明某些单元格已隐藏。
单元格执行提示
我们进行了一些更改,使单元格何时执行以及哪个单元格正在执行更加明显。
首先,当单元格正在执行但未滚动到视图中时,将在编辑器窗格的顶部显示一个进度条。
其次,当单元格正在执行时,笔记本工具栏中添加了一个新按钮 转到正在运行的单元格。
第三,如果通过 notebook.outline.showCodeCells
和 notebook.breadcrumbs.showCodeCells
设置在大纲或面包屑中可见代码单元格,则当它们正在执行时,它们将显示一个动画运行图标。
调试
查看和编辑二进制数据
VS Code 的通用调试器现在支持查看和编辑二进制数据(又名“内存”)。内存查看和编辑可用的变量在 变量 视图中显示一个内联二进制图标,选择它会打开 Hex Editor
主题:Codesong
内存查看和编辑依赖于调试适配器协议的内存相关功能,调试扩展必须实现这些功能才能在 VS Code 中启用相应的 UI。有关详细信息,请参阅下面的 调试器扩展创作 部分。在此版本中,只有内置的 JavaScript 调试器支持查看和编辑二进制数据,但我们预计其他调试扩展也会很快跟进。
JavaScript 调试
从在断点处暂停中排除调用者
有时您可能会设置断点或添加 debugger 语句,但只想在从特定代码路径调用时暂停。DOM 事件处理程序(如 mousemove
)是这方面的一个很好的例子。在此版本中,JavaScript 调试器添加了“从在断点或 debugger 语句处暂停中排除调用者”的功能。
在某个位置暂停时,您可以右键单击 调用堆栈 视图中的帧,然后选择 排除调用者 命令。将显示一个新的 排除的调用者 视图,允许您查看和管理排除的调用者,之后,如果排除的调用者出现在其调用堆栈中的任何位置,您的程序将不会在断点位置暂停。
Linux 上的 Edge 支持
现在可以通过 edge
调试类型在 Linux 上使用 Microsoft Edge 调试。
语言
Markdown 路径智能感知
内置的 Markdown 扩展现在包括用于链接和图像的路径智能感知。
路径建议的工作方式与 CSS 和 HTML 文件中的路径智能感知类似。以 /
开头的路径相对于当前工作区解析,而以 ./
开头或没有任何前缀的路径相对于当前文件解析。当您键入 /
时,会自动显示路径建议,也可以使用 ⌃Space(Windows、Linux Ctrl+Space) 手动调用路径建议。
路径智能感知还可以帮助您链接到当前文件或另一个 Markdown 文件中的标题。以 #
开头路径以查看文件中所有标题的补全(根据您的设置,您可能需要使用 ⌃Space(Windows、Linux Ctrl+Space) 才能看到这些)
您可以使用 "markdown.suggest.paths.enabled": false
禁用路径智能感知。
Markdown 删除线支持
VS Code 现在支持在 Markdown 编辑器和内置 Markdown 预览中渲染 ~~删除线~~
文本
删除线是通过将文本包装在两个波浪线字符中来编写的。
虽然所有 VS Code 的内置主题都支持删除线,但来自 Marketplace 的某些主题可能需要更新才能在编辑器中正确渲染删除线文本。
TS 4.5.5
VS Code 现在捆绑了 TypeScript 4.5.5。
此小版本更新修复了一些重要的崩溃和工具错误。
JS/TS 代码片段环绕
许多 JavaScript 和 TypeScript 代码片段已更新为支持环绕选定的文本。
要使用环绕,请首先选择一些文本,然后运行 插入代码片段。现在,诸如 if
或 forof
之类的代码片段将使用选定的文本作为新语句的主体,而不是替换选定的文本。
HTML 在等号后自动插入引号
在 HTML 中在属性后键入 =
时,语言服务现在会自动插入引号并将光标放在引号之间。设置 html.completion.attributeDefaultValue
允许您指定引号的类型(单引号或双引号),默认情况下使用双引号。
可以通过设置 "html.autoCreateQuotes": false
禁用此功能。
JSON 清除架构缓存命令
新的命令 清除架构缓存 清除先前下载的架构的缓存。
LaTeX 支持
已添加 LaTeX 基本语言支持。这包括语法高亮和自动关闭配对。
VS Code for the Web
远程存储库
GitHub 存储库
在 VS Code for the Web 中创建的提交现在已签名,并在 GitHub UI 中标记为 已验证。此外,维护人员现在可以在使用 VS Code for the Web 时提交从分支提交的拉取请求。这要归功于新的 GitHub GraphQL createCommitOnBranch API。
此外,源代码管理视图现在支持多选。
主题:One Monokai
以前,仅在将 GitHub 存储库克隆到本地或远程计算机后才支持创建空提交。您现在也可以在 VS Code for the Web 中使用 GitHub 存储库:提交空提交 命令创建空提交。
还添加了一个新的配置,以启用自动下载给定大小以下存储库的完整内容,以启用高级功能,如全存储库文本搜索和 转到引用。设置 remoteHub.experimental.fs.maxAutoDownloadSize
控制存储库大小限制,超过此限制将在尝试下载完整内容时显示提示。默认情况下,未设置 maxAutoDownloadSize
,以便在没有提示的情况下永远不会下载。
Azure Repos
Azure Repos 支持已从 GitHub 存储库扩展移出到其自己的专用 扩展,该扩展也可以安装在桌面上。
采用的预发布扩展
VS Code for the Web 现在捆绑了 GitHub Pull Request and Issues 和 GitHub 存储库 扩展的预发布版本。
PWA 和离线支持
VS Code for the Web 已采用 PWA 模型,现在可以作为 PWA 安装在主机操作系统上。由于采用了这种方式,现在也可以启用一些离线功能。访问过 vscode.dev 或 insiders.vscode.dev 后,用户现在即使在离线状态下也可以使用它来编辑本地文件。
扩展贡献
Python
改进的解释器快速选择
为了更容易选择所需的解释器,Python 扩展现在按类型在 选择解释器 快速选择中对解释器进行分组。
我们还在尝试将状态栏中的活动/选定解释器向右移动,可能在语言状态内,因此请检查右侧的 Python 状态,以防它不可见。
添加对“conda run”的支持
为了改进我们对 Anaconda 用户的支持,我们实现了对 conda run
的支持,使用 --no-capture-output
参数,该参数不捕获过去导致错误的输出。此功能已针对执行 linter、测试和格式化功能实现。
存在一个已知错误 issue #10972,当在参数中使用特殊字符运行 linting 和测试时,该错误会在 Windows 上导致错误。这是因为 conda run
如何读取带有特殊字符的参数,因此它可能会影响您在 settings.json
中指定的任何命令行参数。
Anaconda 团队正在处理该问题,并希望尽快发布修复程序。一旦新版本发布,您可以在 Conda 网站 上更新您的 Anaconda 版本。
智能选择和更好的折叠支持
通过 Pylance 语言服务器,还对 Python 代码选择和折叠进行了改进。
使用键盘选择 Python 代码所需的按键次数更少,因为在定义选择范围时会考虑代码的语义信息
至于折叠,以前区域仅由缩进定义,这在某些情况下并不理想,例如多行字符串。现在,折叠区域适当地考虑了语义信息,并且还支持 #region
注释
Jupyter
远程 Jupyter 服务器
Jupyter 扩展现在不再需要在本地和远程 Jupyter 服务器之间切换时重新加载 VS Code。此外,该扩展现在在内核选择器中同时显示本地和远程内核。
Hex Editor
Hex Editor 已经过一些重要的架构重构。值得注意的是,在大多数情况下,它现在能够打开任何大小的文件而不会出现性能问题。此外,其布局宽度现在是可配置的,并且它具有更强大的查找/替换实现。未来的迭代中将继续进行改进。
远程开发
远程开发扩展 的工作仍在继续,这些扩展允许您使用容器、远程计算机或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
您可以在 远程开发发行说明 中了解新的扩展功能和错误修复。
GitHub Pull Requests and Issues
GitHub Pull Requests and Issues 扩展的工作仍在继续,该扩展允许您处理、创建和管理拉取请求和问题。查看扩展的 0.36.0 版本的更新日志 以查看亮点。
预览功能
终端 shell 集成
终端现在具有实验性 shell 集成功能,该功能允许 VS Code 深入了解终端中正在发生的事情,这在以前是未知的。当使用设置 "terminal.integrated.enableShellIntegration": true
启用时,如果可能,将把运行 shell 集成脚本的参数注入到您的终端配置文件中。脚本本身主要将不可见的序列注入到您的提示符中,从而为 VS Code 提供诸如提示符的位置、命令和命令输出、每个命令的当前工作目录 (cwd) 以及每个命令的退出代码等信息。
使用此信息,我们可以通过各种方式增强现有功能
- 快速检测 cwd - 以前这仅在 macOS 和 Linux 上才有可能,并且会启动进程或查询文件系统以获取该信息。现在这也适用于 Windows。cwd 用于链接检测等功能,并在拆分终端选项卡时继承 cwd。
- 改进命令跟踪功能 - 此功能之前已存在,但仅在 macOS 上具有默认键盘快捷键 (
Cmd+Up/Down
),并使用一种朴素的方法来猜测基于何时按下Enter
的行。
Shell 集成启用以下新功能
- 运行最近的命令 - 由于我们知道运行了哪些命令,因此我们可以公开一个命令,让您可以在快速选择中查看并再次运行它们。
- 转到最近的目录 - 与上面类似,我们也允许导航到过去的目录。
- 相对于 cwd 的链接支持 - 我们现在知道终端缓冲区中每一行的 cwd,因此我们可以支持打开终端中相对于激活位置的 cwd 的链接。在之前,当单击链接时,将打开一个快速选择,其中包含与该名称匹配的任何文件夹的结果。现在,将打开精确的文件匹配。
目标是在该功能的可靠性足够好时默认启用 shell 集成。我们对参数注入采取的方法是尽可能不唐突。例如,我们不会像某些终端那样自动修改您的 shell 初始化脚本,而是拦截进程的创建,检查参数,并在我们确信终端可以使用它们运行时注入 shell 集成参数。希望使其在无需用户进行任何配置的情况下也能良好工作,并且不会干扰您现有的 shell 设置。
当前支持的 shell 是 Windows 的 pwsh 以及 Linux 和 macOS 的 pwsh、bash 和 zsh。
如前所述,这是一个实验性功能,有点粗糙,并且存在一些已知问题
- 尚不支持
$PS2
行续行。但是,pwsh 中的行续行确实有效。 - 尚不支持右侧提示符。
- 已知 zsh 脚本有时无法激活。
- 远程 VS Code 窗口支持有限。
资源管理器文件嵌套
资源管理器现在具有实验性支持,可以逻辑嵌套布局显示同一目录中的文件。这有助于直观地将相关文件分组在一起,并将文件折叠到“根”文件中以减少混乱。已添加多个新设置来控制此行为
explorer.experimental.fileNesting.enabled
:控制是否启用文件嵌套。explorer.experimental.fileNesting.expand
:控制文件嵌套是否默认显示为展开状态。explorer.experimental.fileNesting.patterns
:控制文件如何嵌套。
例如,在许多存储库中,.ts
文件与其派生的 .js
、.d.ts
和/或 .js.map
文件相邻。虽然长期以来一直可以通过 files.exclude
完全隐藏派生文件,但现在可以使用嵌套快速访问派生文件,这很不错
下面,资源管理器使用默认的 explorer.experimental.fileNesting.patterns
配置来嵌套 .js
和 .js.map
文件,当展开相应的 .ts
文件时,这些文件会显示出来。
主题: GitHub Light
扩展创作
语言默认图标
语言贡献者可以为语言定义图标。
{
"contributes": {
"languages": [
{
"id": "latex",
// ...
"icon": {
"light": "./icons/latex-light.png",
"dark": "./icons/latex-dark.png"
}
}
]
如果当前文件图标主题仅具有该语言的通用文件图标,则会显示此图标。
此外,像 Minimal
或 None
这样不显示文件图标的文件图标主题将不会使用语言图标。如果文件图标主题具有扩展名或文件名的图标,则将优先使用这些图标。
文件图标主题可以通过在主题文件中定义 showLanguageModeIcons: true|false
来自定义新行为。
showLanguageModeIcons: true
即使主题未指定文件图标,也会显示默认语言图标。showLanguageModeIcons: false
阻止使用默认语言图标。
QuickPickItem 分隔符
扩展作者现在可以在快速选择 (Quick Pick) 中添加分隔符。这对于对项目进行分组或在项目之间添加一些空间非常有用。
要将分隔符添加到现有的快速选择中,请将新的 QuickPickItem
添加到您现有的项目列表中,但请在 QuickPickItem
上指定 kind
属性,并将其设置为 QuickPickItemKind.Separator
。
在上面的示例中,您需要将以下对象添加到您的项目列表中
{
label: 'APIs',
kind: QuickPickItemKind.Separator
}
如果您未指定 kind
属性,或者将其设置为 QuickPickItemKind.Default
,则该项目将被视为普通的 QuickPickItem
。
vscode.workspace.createFileSystemWatcher 现在支持任何路径
现有的 vscode.workspace.createFileSystemWatcher
API 得到了改进,允许您传入任何文件或文件夹路径进行文件监视,即使它在工作区之外。以前,文件监视器仅限于工作区中打开的文件夹。
根据您传递到方法中的 glob 模式,监视器将是递归的(例如,**/*.js
)或非递归的(*.js
)。递归监视器需要更多资源,因此我们建议尽可能使用简单的 glob 模式。
示例
// Watch a folder non-recursively
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.Uri.file(<path to folder outside workspace>), '*.js'));
// Watch the active text editor file
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.window.activeTextEditor.document.uri, '*'));
注意: 作为此更改的一部分,我们对现有的文件监视器进行了行为更改。仅使用 glob 模式指示的文件监视器(例如,vscode.workspace.createFileSystemWatcher('**')
)将不再接收来自工作区外部更改的文件的事件。它只会接收来自工作区内部路径的文件事件。如果用户没有打开的工作区,则不会再通过此方法传递任何事件。这样做是为了确保扩展不会收到来自工作区外部的意外事件。
vscode.TerminalLocation
您可以使用新的 TerminalLocation API 指定扩展终端的创建位置。
这允许通过提供 parentTerminal 创建拆分终端,在 编辑器区域和面板 之间进行选择等等。
onWill 事件的取消令牌
VS Code API 公开了参与文件操作的事件,例如 onWillRenameFiles。这种参与可能是长时间运行的,因此用户可以取消它。在此版本中,用户侧的取消可以通过扩展在相应事件上的取消令牌来观察到,例如 FileWillRenameEvent#token。这允许扩展也取消昂贵的底层操作。
Git 扩展 API
- 添加了一个新的
Repository.add
方法,以启用暂存文件的能力。 - 添加了
Repository.tag
和Repository.deleteTag
方法,以启用创建和删除标签的能力。
onTaskType 激活事件
提供任务的扩展可以使用新的 onTaskType:foo
激活事件来限制其不必要的激活。与在 onCommand:workbench.action.tasks.runTask
上激活相比,这是一个改进,因为 workbench.action.tasks.runTask
通常对于任务提供扩展来说过于急切。
调试器扩展创作
VS Code 现在实现了调试适配器协议的内存相关功能
在此版本中,VS Code 开始支持查看和编辑二进制数据,通过支持 调试适配器协议 的以下内存相关功能
- VS Code 遵循 DAP 变量上的
memoryReference
属性,并通过将客户端功能supportsMemoryReferences
传递给调试适配器来宣布这一点。 - 如果 VS Code 从调试适配器接收到功能
supportsReadMemoryRequest
,它将启用用于查看二进制数据的 UI,并将发出readMemory
请求以检索数据。 - 如果 VS Code 从调试适配器接收到功能
supportsWriteMemoryRequest
,它将启用用于编辑二进制数据的 UI,并将发出writeMemory
请求以存储数据。 - VS Code 处理
memory
事件,并通过将客户端功能supportsMemoryEvent
传递给调试适配器来宣布这一点。
语言服务器协议
新版本的 语言服务器协议 以及相应的 npm 模块已经发布。该版本包含笔记本文档的提案实现。规范部分可以在 此处 阅读。
建议的扩展 API
每个里程碑都带有新的提案 API,扩展作者可以试用它们。与往常一样,我们需要您的反馈。以下是试用提案 API 的步骤
- 查找您想尝试的提案,并将其名称添加到
package.json#enabledApiProposals
。 - 使用最新的 vscode-dts 并运行
vscode-dts dev
。它会将相应的d.ts
文件下载到您的工作区中。 - 您现在可以针对提案进行编程。
您不能发布使用提案 API 的扩展。下一个版本中可能会有破坏性更改,我们永远不想破坏现有的扩展。
禁用终端持久性
创建终端时,您可以通过在 TerminalOptions
或 ExtensionTerminalOptions
中设置 disablePersistence
来选择退出重启和重新加载时的终端持久性。
export interface TerminalOptions {
disablePersistence?: boolean;
}
内嵌提示 API
这是对所有对内嵌提示 API 感兴趣的人的呼吁。它即将完成,并增加了对交互式标签部分的支持。这些部分允许您将源代码位置绑定到提示,从而启用代码导航等功能。此外,现在支持命令。此提案的最新状态和开发情况在此处:vscode.proposed.inlayHints.d.ts
语言状态 API
语言状态项 API 计划最终确定。请试用并提供关于 vscode.proposed.languageStatus.d.ts 的反馈
测试提案
我们正在提出一种官方方式来实现测试的“刷新”处理程序,请查看 vscode.proposed.testRefresh.d.ts。这将允许扩展在 VS Code 中统一使用标准的“刷新”按钮,并避免实现自己的按钮。
此外,我们建议 TestItem
在 vscode.proposed.testSortText.d.ts 中具有 sortText
属性。
内联补全:自动括号补全
当扩展提供内联补全项时,它可以将其属性 completeBracketPairs
设置为 true
。如果设置了,VS Code 会尝试通过关闭或删除括号来修复补全文本中的无效括号,然后再将内联补全显示给用户。
树拖放提案支持拖动到编辑器中
树拖放提案几乎准备好最终确定,现在支持从树视图拖动到编辑器中,当 TreeDragAndDropController
支持 "resourceurls"
mime 类型时。详细信息请参见 issue #141418。试用并提供关于 vscode.proposed.treeViewDragAndDrop.d.ts 的反馈。
注释时间戳
注释 API 在 Comment
上有一个新的 timestamp
属性。 साथ ही API के साथ एक नई सेटिंग है जो यह नियंत्रित करती है कि टिप्पणी टाइमस्टैम्प कैसे प्रदर्शित होते हैं: comments.useRelativeTime
。 请试用并提供关于 vscode.proposed.commentTimestamp.d.ts 的反馈。
工程
vscode-bisect 工具
一个新的用于二分查找已发布的 VS Code Insiders 版本(Web 和桌面)的工具可用于帮助诊断问题
npx vscode-bisect
类似于 git bisect
,vscode-bisect
将启动过去发布的一系列 Insiders 构建版本,询问该构建版本是否重现了该问题。最终结果是引入该问题的一系列提交。该实例将使用专用的全新文件夹用于用户数据,以免影响您的主要开发环境。
从源代码运行 Code Web & Server
从源代码运行 VS Code for the Web 和 VS Code Server 的脚本已移动到 scripts
文件夹
./scripts/code-web.sh|bat
从源代码启动 Code for the Web(又名“无服务器”),并在浏览器中打开它。使用--help
获取更多选项。./scripts/code-server.sh|bat
从源代码启动 VS Code Server。添加--launch
以在浏览器中额外打开 Web UI。使用--help
获取更多选项。./scripts/test-web-integration.sh|bat
用于远程 Web 测试。./scripts/test-remote-integration.sh|bat
用于远程测试。
扩展
在此里程碑中,我们通过最大限度地减少 VS Code 向服务发出的查询数量,改进了 Marketplace 交互。
值得注意的修复
- 91286 客户端上的节流设置同步活动
- 117648 使用扩展 sass 展开 emmet 的 “gtc” 时,结果很奇怪。
- 134466 不存在的调试器配置
- 135677 悬停在设置 UI 链接上时,开头显示 #
- 138072 将最近打开的工作区存储在全局存储中
- 138805 打开大型二进制文件会读取完整内容
- 138850 在磁盘上文件更改后,打开的编辑器可能最终为空
- 139880 调试:在 F5 上被要求保存文件
- 140003 无法从不同工作区文件夹中的启动配置引用任务
- 140129 双击 settings.json 文件每次都会导致新标签页
- 140560 VS Code 停止调试 API 的问题
- 140967 Comment.body 呈现为 Markdown,即使对于纯字符串也是如此
感谢
最后但同样重要的是,衷心感谢 VS Code 的贡献者们。
Web 扩展
感谢扩展作者启用作为 Web 扩展 运行代码的扩展(以下列表介于 2021 年 12 月 7 日至 2022 年 1 月 31 日之间)
- Tabulate (a5hk)
- Powder (Alexey Osipov)
- VCDrom (Aliaksei Chapyzhenka)
- Reveal Button (Andreas Weber)
- Digital Solutions (Andrew Tacon)
- lorem ipsum (aroary)
- Convert Selection (ArturoDent)
- Custom Language Properties (ArturoDent)
- Find and Transform (ArturoDent)
- Launch Configs (ArturoDent)
- Instant Documentation (atanasster)
- Couper Configuration (Avenga Germany GmbH)
- Argdown (Christian Voigt)
- ES7+ React/Redux/React-Native snippets (dsznajder)
- fantasy.markdown-all-in-one-for-web (fantasy)
- fink (fink)
- GitLens (Insiders) (GitKraken)
- Select by Indent (haberdashPI)
- Selection Utilities (haberdashPI)
- Python-Factory Web Search (HyunseungLee)
- Custom Element Scanner (alpha) (JanKretschmer)
- tomato extensions (jingjingwu)
- vscode-position (jtr)
- KCL for vscode.dev (kcl_extension_publisher)
- KL Language support (Kevlanche)
- Systemd Helper (Liu Yue)
- bett3r icons (Lucas)
- xpro-snippets (Maratib Ali Khan)
- Projen (MarkMcCulloh)
- Rainbow CSV (mechatroner)
- Blogview (mkizka)
- CodeSandpack (Mojojoji)
- Abracadabra, refactor this! (Nicolas Carlo)
- Office Script Extension (office-script)
- Better Fountain (Piers Deseilligny)
- Dothttp Http Client (Prasanth)
- 小説 (Public Theta)
- bojodog (RanolP)
- JSON Validate (rioj7)
- Remove Comments (rioj7)
- Everforest (sainnhe)
- Gruvbox Material (sainnhe)
- JetSet for VSCode (Sudhay)
- MathJax for Markdown (TANIGUCHI Masaya)
- WebEnv-Client (Theboys619)
- Graphviz Interactive Preview (tintinweb)
- LLL (tintinweb)
- Vyper (tintinweb)
- Sourcegraph - preview (TJ Kandala)
- Keyboard Macro Beta (tshino)
- WakaTime (WakaTime)
- MSCode (WebXT ES)
- DigitalJS (Yichao Yu)
- Better Snippets (zardoy)
- Fix All JSON (zardoy)
- Zardoy Experiments (zardoy)
问题跟踪
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Simon Chan (@yume-chan)
- heartacker (@heartacker)
- Lemmingh (@Lemmingh)
拉取请求
对 vscode
的贡献
- @btidor (Benjamin Tidor): 修复文本搜索结果中的
undefined
PR #141522 - @ckline-tryptic (Christopher M Kline): 在 git 扩展 API 中公开 'tag' 和 'deleteTag' PR #123815
- @DanielRosenwasser (Daniel Rosenwasser): TS/JS 代码片段中的 “Surround with” PR #138565
- @dnicolson (Dave Nicolson): 添加二分消息的单数形式 PR #137626
- @eltociear (Ikko Ashimine): editors - 修复错别字 PR #140320
- @Enzime (Michael Hoang): ripgrep: 不要对 PCRE2 使用已弃用的标志 PR #139721
- @gjsjohnmurray (John Murray)
- 修复 #118617 在指缺少上游分支时使用术语 'remote' PR #120467
- 更正
screencastMode.keyboardShortcutsFormat
设置的描述 (#_138644) PR #138645 - 显示
editor.hover.delay
的最大值和最小值 (#_140215) PR #140216 - 在 SQL 中支持
--#region
和--#endregion
(#_141257) PR #141264
- @iamkun: refactor: 删除重复的 if 语句 PR #140085
- @imphil (Philipp Wagner): 更新 ripgrep 二进制文件以包含 ppc64le 和 s390x PR #140028
- @jeanp413 (Jean Pierre)
- 使用 workbench.extensions.installExtension 安装具有版本的扩展 PR #136314
- 修复在 Firefox 上打开和关闭终端后,Ctrl + Shift + {Left, Right, Home, End} 损坏的问题 PR #139615
- 修复 vscode web 中更改键盘布局损坏的问题 PR #140295
- 修复连接令牌解析 PR #140532
- @jlelong (Jerome Lelong)
- 基本 LaTeX 内置扩展 PR #138395
- 更新 latex 语言语法和配置 PR #140801
- @jzyrobert (Robert Jin): 更新 html-language-features 以使用 doQuoteComplete PR #137080
- @KapitanOczywisty: 修复 PHP update-grammar.js PR #140619
- @KendallDoesCoding (Kendall Pinto): 创建 pr 的部分 PR #141130
- @KhaledSamir (Khaled): 更正了检测转义百分号的正则表达式。 PR #139437
- @lostintangent (Jonathan Carter): [Markdown] 添加对 GitHub 主题图像的支持 PR #137820
- @Mai-Lapyst: 添加默认文件图标支持到语言贡献 PR #118846
- @MaxGrekhov (Max Grekhov): 打开的编辑器:按完整路径排序 PR #133790
- @nrayburn-tech (Nicholas Rayburn): 将源代码管理视图排序添加到存储 PR #123232
- @OPY-bbt (zhangyan): fix(suggest): 仅在聚焦标签中显示 readmore 图标 PR #139792
- @orta (Orta Therox): 允许扩展能够通过命令向 typescript 扩展的 tsserver 发出请求 PR #138279
- @PieterBranderhorst: 当超出最大折叠数时通知用户,使最大折叠数可配置。 PR #140480
- @samestep (Sam Estep): 添加选项,不将 --no-ignore-parent 传递给 rg PR #140022
- @SeriousBug (Kaan Genç): hasCustomMarkdownPreview 禁用上下文菜单中的 markdown 预览按钮 PR #139241
- @ShafinKhadem (Nafiur Rahman Khadem): 在代码片段末尾添加撤消/重做停止点 PR #140096
- @slidoooor (Hans)
- 修复当获取缓存令牌时,为相同的 markdown 生成不同的 html 内容 PR #138935
- 修复线条重叠几个像素的问题 (#_139311) PR #139575
- testing: 在每次测试运行前添加自动保存 PR #141254
- @smcenlly (Simon McEnlly): testing: 向 TestItem 添加新的 API
sortText
属性 PR #132099 - @SMSadegh19 (Mohammad Sadegh Salimi): 为 readme markdown 预览添加 RTL 语言支持。 PR #139644
- @SNDST00M (M.U.N.I.N): 添加
FontStyle.Strikethrough
支持 PR #139413 - @somebee (Sindre Aarsaether): 修复当编辑器通过 transform 缩放时,装饰器和鼠标点击测试 PR #139282
- @stevenjoezhang (Mimi): 修复具有预定义变量的 terminal.integrated.cwd PR #137023
- @Timmmm (Tim): 修复 parseAddress regex PR #140977
- @TwitchBronBron (Bronley Plumb): 修复 InstallAnotherVersionAction 的性能问题 PR #136992
- @WaqasAliAbbasi (Waqas Ali): 阻止 markdown 代码块和跨度中的链接高亮 PR #140816
- @wengj9 (James Weng): 将扩展信息添加到代码片段选择器 PR #138880
- @Yash621 (Yash Goel): code-insiders --status 导致错误 PR #140152
- @zardoy (Vitaly): 使
showInformationMessage
、showWarningMessage
、showErrorMessage
上的类型定义与字符串项严格匹配 PR #137672
对 vscode-css-languageservice
的贡献
- @fyangstudio (yangfan): Feat: 支持新的解析 import at-rules PR #255
- @romainmenke (Romain Menke): css color : 添加对 hue rad|grad|turn 的支持 PR #257
- @Semigradsky (Dmitry Semigradsky): 支持大小写敏感属性选择器 PR #259
对 vscode-eslint
的贡献
- @edupsousa (Eduardo Pereira de Sousa): 允许用户忽略服务器错误。 PR #1375
对 vscode-extension-samples
的贡献
- @laurentlb (Laurent Le Brun): 修复 comment-sample 中的 'Cancel' 按钮 PR #492
对 vscode-html-languageservice
的贡献
- @zuochenxue (ZuoChenxue): docs: 修正错别字 PR #118
对 vscode-js-debug
的贡献
对 vscode-pull-request-github
的贡献
- @blindpirate (Bo Zhang)
- @joshuaobrien (约书亚·奥布莱恩): 添加打开所有差异的命令 PR #3238
对 vscode-textmate
的贡献
- @SNDST00M (M.U.N.I.N): 实现
FontStyle.Strikethrough
PR #159
对 vscode-vsce
的贡献
- @hangxingliu (刘越): 修复:docker 基础镜像需要为最新的
node:14-alpine
PR #651 - @joerohde (乔·罗德): 特性:健全性检查以验证入口点 PR #669
- @ritwickdey (里特维克·迪伊): 修复:没有 js 标签的入口点验证 PR #676
对 debug-adapter-protocol
的贡献
- @Calindro: 添加了 Emulicious 调试器 PR #230
- @cdaringe (克里斯托弗·迪林格): 文档(实施者):添加 OCaml PR #228
- @ko1 (笹田耕一): 添加
VSCode rdbg Ruby Debugger
PR #232
对 monaco-editor
的贡献
- @blutorange (安德烈·瓦赫斯穆特): 实现 #2383 为 FreeMarker 模板语言添加语法模式 PR #2847
- @forensicmike (forensicmike1): 添加 "cd monaco-editor" 到克隆和运行示例的逐步命令行说明中 PR #2894
- @juan-carlos-diaz: 修复 #2851 正确高亮显示 Shell 语言的属性和标识符(带破折号) PR #2871
- @philipturner (菲利普·特纳)
- @rcjsuen (雷米·苏恩): 在 Markdown 语法中支持连字符 HTML 标签 PR #2864
- @resistdesign (瑞安·格拉夫): 文档:(示例)简化浏览器 ESM Parcel 构建 PR #2832
- @ValeraS (瓦列里)
对 node-jsonc-parser
的贡献
- @Marcono1234
- @P0lip (雅库布·罗热克): findNodeAtLocation 不处理不完整的属性对 PR #44