2022 年 1 月(版本 1.64)
更新 1.64.1:此更新解决了这些安全问题。
更新 1.64.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2022 年 1 月的版本。此版本中有很多更新,我们希望您会喜欢,其中一些主要亮点包括
- 新侧面板 - 使用新的侧面板一次显示更多视图。
- 设置编辑器搜索 - 搜索现在优先考虑完整单词匹配。
- 音频提示 - 当光标移动到折叠区域、错误和断点时发出声音。
- Unicode 高亮显示 - 避免高亮显示支持的语言中的字符。
- 自动终端回复 - 为常见的终端提示创建自动回复。
- 笔记本 UI 改进 - 在 Markdown 和输出单元格中搜索文本。
- 调试二进制数据视图 - 在调试时查看和编辑二进制数据。
- Markdown 路径建议 - 快速插入相对文件路径和标题链接。
- JS/TS 使用代码片段包围 - 在代码片段中插入选定的代码。
- VS Code for Web - 支持在 vscode.dev 和 github.dev 中签署的 GitHub 提交。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
在 VS Code 团队的发布派对上观看此版本新功能的精彩集锦。您可以在我们的 YouTube 频道上找到活动录像。
内部人员:想尽快尝试新功能吗?您可以下载每日内部人员构建版本,并尽快尝试最新的更新。
工作台
新侧面板
在此里程碑中,我们引入了侧面板,它是工作台中与侧边栏相对的新表面,您可以在其中放置侧边栏或底部面板中的视图。与将底部面板移动到编辑器的左侧或右侧不同,新的侧面板是底部面板的补充,因此您可以一次看到更多组视图。
要使用侧面板,您需要将一些视图移动到其中。基于我们最受投票的功能请求之一,您可能希望将“大纲”视图从侧边栏移动到侧面板。您可以通过将视图拖放到侧面板中来实现。如果侧面板未打开,就像底部面板一样,将视图拖到编辑器区域的边缘,它将弹出打开。
在下面的短视频中,“大纲”视图被拖到右侧并放下以创建侧面板。然后,用户可以在侧边栏中切换视图(此处打开全局搜索视图),同时保持“大纲”视图可见。
或者,您可以使用命令面板中的 移动视图 命令,该命令将显示可用视图的下拉列表。当您选择一个视图时,您可以通过创建新的面板/侧边栏/侧面板条目或将视图放置在现有位置(例如“资源管理器”或“源代码管理”)来选择位置。
可以通过抓住视图图标在面板、侧边栏和侧面板之间拖放视图。您可以通过右键单击视图图标并选择重置位置将视图的位置重置回其默认值。
如果您想将所有视图重置回默认布局,可以从命令面板运行 视图:重置视图位置。
替换面板位置
如上所述,新的侧面板提供了与将面板移动到左侧或右侧类似的功能,但通过不移动原始面板的全部内容来对此进行改进。除了面板之间的视图拖放之外,新的侧面板正在替换移动底部面板的选项。
有鉴于此,我们已弃用 workbench.panel.defaultLocation
设置以及 移动面板 命令,而使用类似的命令
- 将视图从面板移动到侧面板 (
workbench.action.movePanelToSidePanel
) - 将视图从侧面板移动到面板 (
workbench.action.moveSidePanelToPanel
)
旧的 移动面板 命令已重新映射到提供类似行为的新命令。即使使用此映射,我们建议您将键盘快捷键更新为新命令。
下面,整个底部面板移动到侧面板,然后返回到原始面板位置。
面板对齐
为了解决另一个受欢迎的功能请求,我们添加了一个名为“面板对齐”的新布局选项。此选项允许您配置底部面板在窗口上的跨度。有四个选项
- 居中 - 这是经典行为。面板仅跨越编辑器区域的宽度。
- 左侧 - 面板将从窗口的左边缘跨越到编辑器区域的右边缘。
- 右侧 - 面板将从窗口的右边缘跨越到编辑器区域的左边缘。
- 两端对齐 - 面板将跨越窗口的整个宽度。
请注意,对于所有选项,活动栏都被视为窗口的边缘。
您可以在 视图 > 外观 > 对齐面板 下的菜单中或使用新的 将面板对齐设置为... 命令来配置这些选项。
自定义布局控制
通过所有这些新的布局选项,我们一直在探索更好的方法来公开布局配置,以便于发现和易于使用。这就是为什么您可能会在标题栏中注意到一个新的实验性 配置布局 按钮。仅当您的 window.titleBarStyle
设置为 custom
(Windows 和 macOS 上的默认设置)且 workbench.experimental.layoutControl.enabled
设置为 true
时,才会显示此按钮。按钮的可见性由实验控制,但是如果您想手动启用它,可以在“设置”编辑器中应用这些设置值 (⌘, (Windows、Linux Ctrl+,))。
菜单的内容仍在处理中,但目前您应该能够看到切换侧边栏、面板和侧面板的功能。此外,您将看到一个新命令 自定义布局 的条目。此新命令会触发新的交互式快速选择体验,使您可以在一处控制布局配置的所有方面。
试用一下,如果您有任何反馈,请在 issue #137633 中告诉我们。
设置编辑器
设置编辑器搜索现在在搜索时查找字符串和枚举设置中的字符串值匹配项。
新的搜索算法还优先考虑整个单词匹配,这意味着如果同时安装了 Java 和 JavaScript 扩展,则在搜索“java”时将首先显示 Java 设置。
最后,设置编辑器中的下拉列表(例如 files.autoSave
)和列表小部件(例如 files.associations
)现在可以与触摸屏设备一起使用。
设置同步
设置同步现在支持同步用户任务。
默认的设置同步计算机名称现在在 VS Code for 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 并启用了他们类似的功能,您可以通过将回复设置为 null
来禁用 Clink 或 VS Code 中的该功能,以避免这两个功能相互冲突
"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 调试
从断点暂停中排除调用者
有时您可能会设置一个断点或添加一个调试器语句,但只想在从特定代码路径调用时暂停。DOM 事件处理程序(如 mousemove
)就是一个很好的例子。在此版本中,JavaScript 调试器添加了从断点或调试器语句的暂停中“排除调用者”的功能。
当在某个位置暂停时,您可以右键单击 调用堆栈 视图中的一个帧,然后选择 排除调用者 命令。将显示一个新的 已排除的调用者 视图,允许您查看和管理已排除的调用者,此后,如果被排除的调用者出现在其调用堆栈中的任何位置,您的程序将不会在断点位置暂停。
Linux 上的 Edge 支持
现在可以通过 edge
调试类型在 Linux 上进行 Microsoft Edge 调试。
语言
Markdown 路径 IntelliSense
内置的 Markdown 扩展现在包括链接和图像的路径 IntelliSense。
路径建议的工作方式类似于 CSS 和 HTML 文件中的路径 IntelliSense。以 /
开头的路径相对于当前工作区解析,而以 ./
开头或没有任何前缀的路径相对于当前文件解析。当您键入 /
时会自动显示路径建议,也可以使用 ⌃Space (Windows, Linux Ctrl+Space) 手动调用路径建议。
路径 IntelliSense 还可以帮助您链接到当前文件或另一个 Markdown 文件中的标题。使用 #
开始路径以查看文件中所有标题的补全(根据您的设置,您可能需要使用 ⌃Space (Windows, Linux Ctrl+Space) 才能看到这些)
您可以使用 "markdown.suggest.paths.enabled": false
禁用路径 IntelliSense。
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 Web
远程仓库
GitHub 仓库
在 Web 版 VS Code 中创建的提交现在会被签名,并在 GitHub UI 中标记为 已验证。此外,当使用 Web 版 VS Code 时,维护者现在可以提交来自 fork 的拉取请求。这归功于新的 GitHub GraphQL createCommitOnBranch API。
此外,“源代码管理”视图现在支持多选。
主题:One Monokai
之前,仅在将 GitHub 仓库克隆到本地或远程计算机后才支持创建空提交。现在,您还可以使用 Web 版 VS Code 中的 GitHub 仓库:提交空提交 命令创建空提交。
还添加了一个新的配置,用于启用自动下载给定大小以下的仓库的完整内容,以启用高级功能,如全仓库文本搜索和转到引用。设置 remoteHub.experimental.fs.maxAutoDownloadSize
控制在尝试下载完整内容时显示提示之前的仓库大小限制。默认情况下,maxAutoDownloadSize
未设置,以便在没有提示的情况下永远不会下载。
Azure Repos
Azure Repos 支持已从 GitHub 仓库扩展移至其自己的专用扩展,该扩展也可以安装在桌面版上。
采用预发布扩展
Web 版 VS Code 现在捆绑了 GitHub 拉取请求和问题 和 GitHub 仓库 扩展的预发布版本。
PWA 和离线支持
Web 版 VS Code 已采用 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。此外,该扩展现在在内核选择器中同时显示本地和远程内核。
十六进制编辑器
十六进制编辑器 进行了一些重大的架构重构。值得注意的是,在大多数情况下,它现在可以打开任何大小的文件而不会出现性能问题。此外,它的布局宽度现在可以配置,并且具有更强大的查找/替换实现。未来迭代中将继续改进。
远程开发
远程开发扩展的工作仍在继续,这些扩展允许您使用容器、远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
您可以在远程开发发布说明中了解新的扩展功能和错误修复。
GitHub 拉取请求和问题
GitHub 拉取请求和问题 扩展的工作仍在继续,该扩展允许您处理、创建和管理拉取请求和问题。查看该扩展的 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
属性。此外,还有一个新的设置用于控制注释时间戳的显示方式:comments.useRelativeTime
。请试用并为 vscode.proposed.commentTimestamp.d.ts 提供反馈。
工程
vscode-bisect 工具
一个新的用于二分查找已发布 VS Code Insiders 版本(Web 和桌面)的工具可用于帮助诊断问题
npx vscode-bisect
类似于 git bisect
,vscode-bisect
将启动过去发布的一系列 Insiders 构建版本,询问该构建版本是否重现了该问题。最终结果是一系列引入该问题的提交。该实例将使用专用的新文件夹来存储用户数据,以避免影响您的主要开发环境。
从源代码运行 Code Web 和服务器
从源代码运行 VS Code for Web 和 VS Code Server 的脚本已移动到 scripts
文件夹
./scripts/code-web.sh|bat
从源代码启动 Code for 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 代码片段中的“用...包围” PR #138565
- @dnicolson (Dave Nicolson): 添加二分法消息的单数形式 PR #137626
- @eltociear (Ikko Ashimine): 编辑器 - 修复拼写错误 PR #140320
- @Enzime (Michael Hoang): ripgrep: 不再使用 PCRE2 的已弃用标志 PR #139721
- @gjsjohnmurray (John Murray)
- 修复 #118617:在指代缺少上游分支时使用术语“远程” PR #120467
- 更正
screencastMode.keyboardShortcutsFormat
设置的描述 (#_138644) PR #138645 - 显示
editor.hover.delay
的最大值和最小值 (#_140215) PR #140216 - 支持 SQL 中的
--#region
和--#endregion
(#_141257) PR #141264
- @iamkun: 重构:删除重复的 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
- 测试:在每次测试运行之前添加自动保存 PR #141254
- @smcenlly (Simon McEnlly): 测试:向 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 正则表达式 PR #140977
- @TwitchBronBron (Bronley Plumb): 修复 InstallAnotherVersionAction 的性能问题 PR #136992
- @WaqasAliAbbasi (Waqas Ali): 防止 markdown 代码块和 span 中的链接高亮显示 PR #140816
- @wengj9 (James Weng): 向代码片段选择器添加扩展信息 PR #138880
- @Yash621 (Yash Goel): code-insiders --status 导致错误 PR #140152
- @zardoy (Vitaly): 使
showInformationMessage
、showWarningMessage
、showErrorMessage
的类型定义在将 items 作为字符串时更严格 PR #137672
对 vscode-css-languageservice
的贡献
- @fyangstudio (yangfan): 新功能:支持新的解析导入 at-rules PR #255
- @romainmenke (Romain Menke): css 颜色:添加对色调 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 中的“取消”按钮 PR #492
对 vscode-html-languageservice
的贡献
- @zuochenxue (ZuoChenxue): 文档:更正拼写错误 PR #118
对 vscode-js-debug
的贡献
对 vscode-pull-request-github
的贡献
对 vscode-textmate
的贡献
- @SNDST00M (M.U.N.I.N): 实现
FontStyle.Strikethrough
PR #159
对 vscode-vsce
的贡献
- @hangxingliu (Liu Yue): 修复:docker 基础镜像需要使用最新的
node:14-alpine
PR #651 - @joerohde (Joe Rohde): 新功能:健全性检查以验证入口点 PR #669
- @ritwickdey (Ritwick Dey): 修复:没有 js 标签的入口点验证 PR #676
对 debug-adapter-protocol
的贡献
- @Calindro: 添加了 Emulicious 调试器 PR #230
- @cdaringe (Christopher Dieringer): 文档(实现者):添加 OCaml PR #228
- @ko1 (Koichi Sasada): 添加
VSCode rdbg Ruby Debugger
PR #232
对 monaco-editor
的贡献
- @blutorange (Andre Wachsmuth): 实现 #2383 为 FreeMarker 模板语言添加语法模式 PR #2847
- @forensicmike (forensicmike1): 将 "cd monaco-editor" 添加到克隆和运行示例的分步命令行说明中 PR #2894
- @juan-carlos-diaz: 修复 #2851 正确高亮显示 Shell 语言的属性和标识符(带破折号) PR #2871
- @philipturner (Philip Turner)
- @rcjsuen (Remy Suen): 支持 Markdown 语法中的连字符 HTML 标签 PR #2864
- @resistdesign (Ryan Graff): 文档: (示例) 简化浏览器 ESM Parcel 构建 PR #2832
- @ValeraS (Valeriy)
对 node-jsonc-parser
的贡献
- @Marcono1234
- @P0lip (Jakub Rożek): findNodeAtLocation 不处理不完整的属性对 PR #44