2022 年 6 月(版本 1.69)
更新 1.69.1:此更新解决了这些问题。
更新 1.69.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2022 年 6 月版。此版本有许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 三向合并编辑器 - 在 VS Code 中解决合并冲突。
- 命令中心 - 新的用户界面,用于搜索文件、运行命令和导航光标历史记录。
- 免打扰模式 - 静默非关键通知弹窗。
- 切换浅色/深色主题 - 在首选的浅色和深色主题之间快速切换。
- 终端 Shell 集成 - 显示命令状态、运行最近的命令等。
- 任务输出装饰 - 高亮显示任务成功或失败的退出代码。
- Git 提交操作按钮 - 配置您的默认 Git 提交操作。
- 调试步入目标支持 - 允许您在暂停时直接步入函数。
- JavaScript 源码映射切换 - 切换到调试编译代码而不是源代码。
- 颜色主题测试器 - 使用 vscode.dev 预览颜色主题。
- VS Code 服务器预览 - 运行用于远程开发的相同服务器。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。
观看发布派对: 聆听 VS Code 团队讨论一些新功能。您可以在我们的 YouTube 频道上找到活动的录音。
内测版: 想尽快尝试新功能吗?您可以下载每晚更新的内测版,并在最新更新发布后立即尝试。
工作台
三向合并编辑器
在此版本中,我们继续开发三向合并编辑器。此功能可以通过将 git.mergeEditor
设置为 true
来启用,并将在未来版本中默认启用。
合并编辑器允许您快速解决 Git 合并冲突。启用后,可以通过在“源代码管理”视图中单击冲突文件来打开合并编辑器。复选框可用于接受并合并他们的或您的更改
所有语言功能在合并编辑器中都可用(包括诊断、断点和测试),因此您可以立即获得有关合并结果中任何问题的反馈。
结果也可以直接编辑。请注意复选框如何按预期更新
关闭合并编辑器或接受合并时,如果并非所有冲突都已解决,将显示警告。
合并编辑器支持单词级合并 - 只要更改不交叉,两边都可以应用。如果插入顺序很重要,可以交换。在任何时候,冲突也可以手动解决。
我们很乐意听取您的反馈!要与我们分享合并冲突,请使用命令合并编辑器(开发):从 JSON 复制输入、基础和结果的内容,并将内容粘贴到您的 GitHub issue 中。
命令中心
命令中心已经过完善,现在可以试用了。通过 window.commandCenter
设置启用它。
命令中心取代了正常的标题栏,让您可以快速搜索项目中的文件。单击主区域以显示带有您最近文件和搜索框的“快速打开”下拉菜单。
主题:GitHub 主题
命令中心右侧还有一个按钮,可以通过“?”显示“快速访问”选项。左侧是后退和前进按钮,用于导航您的编辑器历史记录。
设置编辑器修改指示器
设置编辑器现在显示何时某个设置具有语言覆盖。在此上下文中,语言覆盖始终优先于非语言特定的覆盖,因此如果某个设置的值似乎不影响特定文件类型的设置行为,则可能是该设置具有语言覆盖。
指示器文本已更改为更清晰简洁。下面的短视频显示了新的“在其他地方修改”指示器。将鼠标悬停在指示器上会显示一个悬停提示,其中显示适用的语言覆盖。视频后面显示了新的默认覆盖指示器,文本为“默认值已更改”。
主题:浅粉色
免打扰模式
新的免打扰模式在启用时会隐藏所有非错误通知弹窗。进度通知将自动显示在状态栏中。隐藏的通知仍然可以在通知中心查看。
您可以通过打开通知中心(选择状态栏右侧的铃铛图标)并单击斜线铃铛图标来切换免打扰模式。免打扰模式在状态栏中由斜线铃铛图标表示。
在浅色和深色主题之间切换
一个新命令允许您在首选的浅色和深色主题之间切换:首选项:在浅色/深色主题之间切换。当处于浅色主题时,该命令会切换到深色主题,反之亦然。
当处于高对比度主题时,该命令会保持高对比度,并切换到相反颜色主题的首选高对比度主题。
首选主题由以下设置定义
workbench.preferredDarkColorTheme
workbench.preferredLightColorTheme
workbench.preferredHighContrastColorTheme
workbench.preferredHighContrastLightColorTheme
小地图上下文菜单
VS Code 小地图在编辑器侧边显示源代码文件的高级轮廓。您可以通过视图:切换小地图命令切换小地图的可见性,或通过编辑器 > 小地图:启用 (editor.minimap.enabled
) 设置完全禁用小地图。在此版本中,现在有一个上下文菜单可以轻松显示或隐藏小地图。
您还可以通过大小 (editor.minimap.size
)、比例 (editor.minimap.scale
) 和滑块 (editor.minimap.showSlider
) 设置来调整外观。如果小地图被隐藏,您仍然可以通过右键单击侧边栏来显示上下文菜单。
共享菜单
复制 vscode.dev 链接命令可以从文件 > 共享子菜单中使用,以快速获取您打开的 GitHub 仓库的 vscode.dev 链接。共享子菜单也从编辑器上下文菜单中提供。
终端
Shell 集成
PowerShell、bash 和 zsh 的 Shell 集成自一月发布以来一直在预览中,现在已退出预览!我们计划在 1.70 版本中默认启用它。
要启用 Shell 集成功能,请在“设置”编辑器中勾选终端 > 集成 > Shell 集成:已启用,或在您的 settings.json
中设置值。
"terminal.integrated.shellIntegration.enabled": true
Shell 集成允许 VS Code 的终端更好地理解 Shell 中发生的情况,以便启用更多功能。Shell 集成的一个目标是使其能够在无需配置的情况下工作。这是通过在启用设置时,通过 Shell 参数和/或环境变量自动“注入”Shell 集成脚本到 Shell 会话中来实现的。在某些情况下,例如子 Shell 或一些复杂的 Shell 设置中,这可能不起作用,但对于那些更高级的情况,我们也提供了手动安装途径。
以下是 Shell 集成目前提供的功能摘要
命令装饰和概览尺
Shell 集成能够获取在终端中运行的命令的退出代码。利用这些信息,在行左侧添加装饰以指示命令是成功还是失败。这些装饰也会像在编辑器中一样显示在滚动条的概览尺中。
装饰可以支持上下文操作,例如重新运行命令
命令装饰可以通过以下设置进行配置
terminal.integrated.shellIntegration.decorationIcon
terminal.integrated.shellIntegration.decorationIconSuccess
terminal.integrated.shellIntegration.decorationIconError
命令导航
Shell 集成检测到的命令会馈送到命令导航功能 (Ctrl/Cmd+Up
, Ctrl/Cmd+Down
),以提供更可靠的命令位置。此功能允许在命令之间快速导航并选择其输出。
运行最近的命令
终端:运行最近的命令命令在快速选择中显示来自各种来源的历史记录,提供类似于 Shell 反向搜索 (Ctrl+R
) 的功能。最近的命令来自当前会话的历史记录、此 Shell 类型的先前会话历史记录以及常见的 Shell 历史文件。
该命令的其他功能
- 在当前会话部分,快速选择的右侧有一个剪贴板图标,它将在编辑器中打开命令输出。
- 可以按住
Alt
将文本写入终端而不运行它。 - 先前会话部分中存储的历史记录量由
terminal.integrated.shellIntegration.history
设置确定。
目前,默认情况下没有为运行最近的命令分配键绑定,但例如,它可以通过以下键绑定连接到 Ctrl+Space
{
"key": "ctrl+space",
"command": "workbench.action.terminal.runRecentCommand",
"when": "terminalFocus"
},
转到最近的目录
转到最近的目录
与运行最近命令功能类似,终端:转到最近目录命令会跟踪已访问的目录,并允许快速筛选和导航 (cd
) 到它们
可以按住 Alt
将文本写入终端而不运行它。
当前工作目录检测
Shell 集成告诉我们当前的工作目录是什么。以前,在 Windows 上没有一堆技巧是不可能确定此信息的,并且在 macOS 和 Linux 上需要轮询,这对性能不利。
当前工作目录用于解析相对链接,显示最近命令运行所在的目录,以及支持拆分当前工作目录 "terminal.integrated.splitCwd": "inherited"
功能。
对 Shell 设置的日益增长的支持
此版本中,我们改进了与 bash-preexec 的集成,添加了对 powerlevel10k 的基本支持,并检测到更多 Shell 集成无法工作的情况,并优雅地禁用了该功能。我们预计随着时间的推移,这方面会有大量改进。
SetMark 序列支持
终端现在支持最初由 iTerm2 创建的序列 'OSC 1337 ; SetMark ST'
,使得在行左侧和滚动条中添加标记成为可能。
主题:蓝宝石主题
- 以下是一些如何在脚本中触发此操作的示例
- bash:
echo -e 'Mark this line\x1b]1337;SetMark\x07'
pwsh: Write-Host "Mark this line`e]1337;SetMark`a"
简单 Powerline 字形的自定义渲染
- 当终端中启用 GPU 加速时,四个常见的尖括号 Powerline 符号现在以类似于方框绘图和块字符的方式自定义渲染。这带来了以下几个好处:
- 永远不会使用次像素抗锯齿,这可能导致两侧出现难看的红色或蓝色轮廓,从而破坏“电源线”。
- 这些字符无需安装修补字体即可工作。
行高会影响这些字符。
之前
之后
VS Code 消息的统一格式
以前,终端中由 VS Code 直接写入而非进程写入的消息使用多种不同格式。现在,无论是显著格式还是更细微的格式,都实现了全面一致。
辅助功能改进
- 本迭代中,终端在辅助功能方面有多项改进
- 现在,在终端:打开检测到的链接...命令中,默认情况下有更多链接可用,并能够搜索终端缓冲区的其余部分。
- 现在,终端:运行最近的命令命令允许通过按住
Alt
来输入生成的命令而不运行它。 - 终端中的查找功能改进了屏幕阅读器公告。
- 在导航模式 (
Ctrl+Up
) 中,无需使用修饰键即可使用向上和向下。
现在可以在导航模式 (Ctrl+Up
) 中使用 Page up 和 Page down 来按页滚动。
进程重新连接和恢复改进
- 终端持久性获得了一些用户体验和可靠性改进
- 以前,重新加载窗口
n
次会显示n
个会话恢复消息。现在,会话恢复消息只应在特定会话有输入时显示。 - 以前包含日期的会话恢复消息已简化为“历史记录已恢复”,以减少干扰。
任务
“环境变量收集”功能(用于通知用户扩展程序希望更改环境,例如支持自动 Git 身份验证)现在在重新加载后仍可工作。
装饰
几个迭代之前,我们感谢 Shell 集成功能,在终端缓冲区和概览尺中添加了装饰,以改善终端的导航。现在,装饰还标记了任务的兴趣点,可以使用命令导航功能 (Ctrl/Cmd+Up
, Ctrl/Cmd+Down
) 跳转到这些点。
对于启动/停止任务,任务开始旁边会出现一个装饰,并根据运行的退出代码(如果有)进行样式设置。
对于监视任务,每个编译的第一个报告问题旁边都会出现一个装饰。
图标和颜色支持
{
"label": "test",
"type": "shell",
"command": "echo test",
"icon": { "id": "light-bulb", "color": "terminal.ansiBlue" }
}
现在可以为任务设置一个 icon
,其中包含 Codicon id
和终端 ANSI color
属性。例如
源代码管理
Git 仓库的提交“操作按钮”
kind
属性设置为 test
的任务,默认使用 beaker
图标。
Git 仓库的“提交操作按钮”
在1.61 版本中,为 Git 仓库添加了发布和同步更改“操作按钮”。在这个里程碑中,我们添加了一个提交按钮,它有一个主要操作以及一组次要操作。次要操作可以使用 git.postCommitCommand
设置来控制,并允许您在提交后执行推送或同步。
随着提交“操作按钮”的添加,有一个新设置 git.showActionButton
,您可以使用它来控制在源代码管理视图中显示的 Git 操作按钮。您仍然可以使用通用的 scm.showActionButton
设置来全局禁用由实现源代码管理提供程序的扩展所贡献的任何操作按钮的可见性。
使用编辑器编写提交消息
在这个里程碑中,您现在可以使用完整的文本编辑器来编写提交消息,只要在提交输入框中未提供消息。要使用此新流程,请在未提供提交消息的情况下单击提交按钮。
您现在可以在编辑器中编写提交消息。要接受提交消息并完成提交操作,请关闭编辑器选项卡或选择编辑器工具栏中的接受提交消息按钮。要取消提交操作,您可以清除文本编辑器的内容并关闭编辑器选项卡,或选择编辑器工具栏中的放弃提交消息按钮。
您可以通过切换 git.useEditorAsCommitInput
设置来禁用此新流程,并回退到使用快速输入控件的先前体验。更改设置后,您必须重启 VS Code 才能使更改生效。
要在集成终端中执行的 git commit
命令使用相同流程,请启用 git.terminalGitEditor
设置。启用设置后,您必须重启终端会话。
分支保护指示器
上一个里程碑,我们添加了 git.branchProtection
设置,您可以使用它来配置受保护的特定分支。在这个里程碑中,在状态栏和分支选择器中添加了受保护分支的视觉指示器(锁图标)。
调试
状态栏
分支选择器
- 改进的“步入目标”用户界面
- 某些调试器允许在行上暂停时直接步入特定的函数调用。本次迭代,我们改进了此功能的用户界面
右键单击源代码行上的目标区域并选择步入目标将自动步入目标区域(如果存在)。
命令面板中新增了调试:步入目标命令,并支持⌘F11 (Windows, Linux Ctrl+F11) 键盘快捷方式。
在调试控制台中导航
通过快速访问菜单访问控制台
现在有一个快速访问菜单,用于查看您的调试控制台列表。在菜单中,您可以选择控制台名称以在底部面板中显示它。在这里,您可以搜索和筛选您的控制台名称。
-
主题:GitHub 暗淡
-
有三种不同的方式可以访问此快速访问菜单
-
在快速打开菜单 (⌘P (Windows, Linux Ctrl+P)) 中输入
?
,然后选择查看调试控制台的选项。
使用调试:选择调试控制台命令。
在快速打开菜单中手动输入 debug consoles
(带尾随空格字符)。
通过视图菜单访问控制台
您还可以从现有视图菜单中访问调试控制台列表。在快速打开菜单中输入 view
(带尾随空格),然后向下滚动到调试控制台面板标题。您将看到可用调试控制台的列表。
在控制台之间切换
您现在可以使用 ⇧⌘[ (Windows, Linux Ctrl+PageUp) 导航到上一个调试控制台,并使用 ⇧⌘] (Windows, Linux Ctrl+PageDown) 导航到下一个控制台。
加载脚本的搜索和过滤
以前,您只能在运行和调试菜单的树视图中查看已加载的脚本。现在,您可以使用新的调试:打开加载脚本...命令搜索并导航到脚本。它的工作方式与转到文件...命令完全相同,但您可以导航到已加载的脚本。
JavaScript 调试
源码映射切换
您现在可以通过单击调用堆栈视图标题中的 🧭 指南针图标轻松切换源码映射的开启和关闭。当源码映射关闭时,在源代码中设置的断点仍然有效,但会移动到编译代码中的等效位置,并且调试器将单步执行编译代码而不是源代码。
主题:Codesong
当源码映射关闭时,调试工具栏中会显示一个类似的按钮,可以将其重新打开。切换状态会保留在工作区中。
toString() 变量预览
如果变量或属性具有自定义的 toString()
方法,它将被调用以在变量视图和悬停提示中渲染预览。对于具有良好字符串表示的复杂类型,这是一个比通用对象预览更好的改进。
例如,VS Code 的 Range
有一个 toString
方法,使其更容易一目了然地理解
这可以通过调试: 步进到目标命令 (⌘F11 (Windows, Linux Ctrl+F11)) 或右键单击该行来访问。
步入目标支持
JavaScript 调试器现在支持步入目标,允许您轻松步入代码行上的函数调用。
这可以通过调试:步入目标命令 (⌘F11 (Windows, Linux Ctrl+F11)) 或右键单击该行来访问。
编辑器
JavaScript 调试中未绑定断点警告图标
如果您正在调试 TypeScript/JavaScript 项目,并且在配置源码映射或绑定断点时遇到问题,VS Code 现在将在“断点”视图中显示一个提示消息,其中包含指向 JavaScript 调试器断点故障排除工具的链接。当您将鼠标悬停在编辑器中的灰色断点图标上时,也会看到此提示。
当显示此提示的 API 最终确定后,其他调试器将能够显示带有其各自适当消息的提示。
语言
带预览的重构
以前,无法审查重构将应用的更改。为了改善重构体验,现在有一个可以从命令面板访问的带预览重构命令。带预览重构... 的工作方式与重构... 命令类似,但会打开一个重构预览面板。用户可以选择一个重构预览以在编辑器中打开重构预览的更大视图。本次迭代主要侧重于预览重构带来的代码更改,未来将推出更多功能和自定义代码操作菜单控件。
[Some link](<path to file with spaces.md>)
带预览重构... 在工作台中打开一个窗格,并打开重构预览编辑器视图。
Markdown 中尖括号链接的支持
Markdown 允许您使用尖括号来编写包含空格或其他特殊字符的链接目标
下面的短视频是在 editor.quickSuggestions
设置对所有条目都设为 off
的情况下录制的。
本次迭代,我们改进了对尖括号链接的支持,使其在编辑器中正确高亮显示并可点击。
Emmet 内联补全设置
Emmet 有一个新设置 emmet.useInlineCompletions
,允许在文件中进行内联补全。目前,最好仅在编辑 HTML 和 CSS 文件时启用此设置。
下面的短视频是在 editor.quickSuggestions
设置对所有条目都设置为 off
的情况下录制的。
{
"[html]": {
"files.insertFinalNewline": true
}
}
笔记本
语言指示器中的 JSON 通知
当有太多折叠区域、文档符号或颜色装饰器要显示时,VS Code 不再使用通知,而是使用 JSON 语言指示器来通知用户。
注释
HTML 最终换行符格式化设置更改
设置 html.format.endWithNewline
已被移除,取而代之的是 files.insertFinalNewline
。
files.insertFinalNewline
适用于所有编程语言。如果您想为每种语言设置不同的设置,可以使用语言范围
可以拖动“添加评论”的“+”按钮来添加多行评论。
企业版
支持笔记本内扩展推荐
为了帮助改善未安装所需扩展时笔记本的入门体验,我们更新了扩展推荐流程,并允许您直接从笔记本窗口安装扩展。这大大减少了从未安装扩展到在 VS Code 中运行单元所需的步骤。本次迭代为 Python Jupyter 笔记本启用了此体验,后续将支持更多笔记本类型和语言。
切换编辑器注释
新命令注释:切换编辑器注释可切换所有编辑器注释功能,包括注释范围槽装饰、行悬停时的“+”以及所有编辑器注释小部件。在禅模式下将自动禁用注释。
Web 版 VS Code
拖动以添加多行注释
可以拖动“添加注释”的“+”按钮以添加多行注释。
Windows 上的 UpdateMode 组策略
VS Code 现在支持 基于 Windows 注册表的组策略,它允许系统管理员在其管理的机器上创建和部署策略。
VS Code 支持的第一个策略是 UpdateMode
,它会覆盖 update.mode
设置,并控制 VS Code 在新版本发布时是否自动更新。
有关更多信息,请参阅企业版文档中的 Windows 组策略。
主题测试器支持内置主题
主题测试器是 vscode.dev 中的一个路由,可用于展示和试用颜色主题而无需安装。通过指定扩展 ID 和主题名称,此功能已可用于市场上的主题扩展。例如,要查看 GitHub 主题扩展(扩展 ID github.github-vscode-theme
)的“GitHub Dark Default”主题,您可以使用以下 URL 启动 vscode.dev
https://vscode.dev/editor/theme/github.github-vscode-theme/GitHub%20Dark%20Default
主题测试器现在也可以与 VS Code 中的内置主题一起使用。将 vscode.theme-defaults
用作扩展 ID 占位符,然后指定您想要查看的主题名称。
例如,要测试“高对比度浅色”主题,您可以使用以下 URL
VS Code 服务器(私人预览版)
https://vscode.dev/editor/theme/vscode.theme-defaults/Default%20High%20Contrast%20Light
扩展的部分本地化支持
上一个迭代中,在 vscode.dev,我们引入了核心产品提供的字符串的本地化。本次迭代我们包含更多字符串 - 特别是扩展在其扩展清单中提供的静态字符串。仍然有扩展提供的其他部分字符串需要本地化(在其源代码中声明的字符串),因此我们将在下一次迭代中继续进行这项工作。
配置显示语言命令
对扩展的贡献
对于某些用户,配置浏览器使用的语言是不可能的。为了解决这个问题,Web 版 VS Code 现在提供了配置显示语言命令,允许您覆盖浏览器设置的默认语言。
此外,您可以使用清除显示语言首选项命令来移除此覆盖。
VS Code 服务器(私人预览)
在 VS Code 中,我们希望用户能够无缝利用使其生产力最高的环境。VS Code 远程开发扩展允许您直接从 VS Code 中在适用于 Linux 的 Windows 子系统 (WSL)、通过 SSH 的远程机器以及开发容器中工作。这些扩展会在远程环境中安装一个服务器,使本地 VS Code 能够顺利地与远程源代码和运行时进行交互。
我们现在提供一个独立的“VS Code 服务器”的私人预览版,这是一个基于远程扩展所使用的相同底层服务器构建的服务,并增加了一些额外功能,例如交互式 CLI 和促进与 vscode.dev 的安全连接,而无需 SSH 连接。
我们的最终目标是增强您今天使用的 code
CLI,以打开 VS Code 的桌面版和 Web 版实例,无论您的项目存储在哪里。虽然我们正在积极为此努力,但 VS Code 服务器是一个重要的里程碑,我们渴望将其作为私人预览版发布以获取您的反馈。
您可以在 VS Code 服务器的发布博客文章和视频中了解如何开始使用 VS Code 服务器,并在其文档中查看更多详细信息。
ESLint
ESLint 扩展的 2.2.6 版本已发布。除了各种错误修复外,现在还支持所有受支持 ESLint 语言的笔记本单元中的 linting。
Jupyter
- IPyWidgets
IPyWidgets
现在支持除Python
之外的内核,例如 Common Lisp 和 IHaskell。- 许多与资源(图像、脚本等)加载相关的
IPyWidget
问题已得到解决,从而改进了对 VegaFusion、ipyleaflet、Chemiscope、mobilechelonian 和 ipyturtle 等小部件的支持。
其他值得注意的 IPyWidget
修复包括在 Jupyter Output 小部件中显示复杂和嵌套(包括交互式)输出。
jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net
Web 扩展
我们已在 Web 版 Jupyter 扩展中支持更多核心功能方面取得了进展。
本月,以下功能已移植到 Web 扩展
导出交互式窗口
- 调试交互式窗口
- 交互式窗口中可折叠的单元格
- 如果您想体验此功能,请使用以下命令从本地机器启动 Jupyter
查看此扩展的0.46.0 版更新日志,了解其他亮点。
预览功能
然后,在 vscode.dev 中使用命令Jupyter: 指定用于连接的 Jupyter 服务器连接到它。
有关更多信息(和评论),请参阅此讨论项。
GitHub 拉取请求和问题
GitHub 拉取请求和问题扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括
新增设置 "githubPullRequests.ignoredPullRequestBranches"
,用于忽略拉取请求的分支。
使用设置 "githubPullRequests.pushBranch"
创建 PR 时,可以跳过发布分支?对话框。
- 现在,概览编辑器中提供自动合并复选框。
- 查看扩展的 0.46.0 版本更新日志以查看其他亮点。
- TypeScript 4.8 支持
- 此更新包括对即将发布的 TypeScript 4.8 版本的支持。有关 TypeScript 团队当前正在开发内容的更多详细信息,请参阅TypeScript 4.8 迭代计划。
- 要开始使用 TypeScript 4.8 每晚构建版本,请安装 TypeScript Nightly 扩展。
- Markdown 链接验证
我们继续完善 Markdown 文件中的链接验证。此实验性功能可以帮助捕获 Markdown 文件中指向图像或标题的断开链接。
除了修复了许多错误和提高了性能之外,我们还重命名了一些设置,以使其功能更清晰。以下是新的设置名称
markdown.experimental.validate
- 启用/禁用所有链接验证功能。
markdown.experimental.validate.fileLinks.enabled
- 启用/禁用对本地文件链接的验证:[link](/path/to/file.md)
markdown.experimental.validate.fileLinks.markdownFragmentLinks
- 启用/禁用对本地文件链接片段部分的验证:[link](/path/to/file.md#some-header)
markdown.experimental.validate.fragmentLinks.enabled
- 启用/禁用对当前文件中标题链接的验证:[link](#_some-header)
markdown.experimental.validate.referenceLinks.enabled
- 启用/禁用对引用链接的验证:[link][ref]
。
markdown.experimental.validate.ignoreLinks
- 一个跳过验证的链接列表。如果您链接到磁盘上不存在但 Markdown 发布后存在的文件的链接,这会很有用。
"workbench.colorCustomizations": {
"statusBarItem.settingsProfilesBackground": "#ce4918",
"statusBarItem.settingsProfilesForeground": "#e0dfdb",
}
试一试,让我们知道您对新功能的看法!
设置配置文件
过去几个月我们一直致力于在 VS Code 中支持设置配置文件,这是社区最受欢迎的需求之一。在此里程碑中,我们很高兴地宣布此功能已通过 workbench.experimental.settingsProfiles.enabled
设置在 Insiders 版本中准备好进行预览。请试用此功能,并通过在我们的 VS Code 存储库中创建问题或在问题 #116740 中评论来告诉我们您的反馈。
设置配置文件由设置、键盘快捷方式、扩展、状态、任务和代码片段组成。您可以为不同的开发环境(如 Web、机器学习)、多种编程语言课堂(如 Python、Java)或个人模式(如工作或演示)自定义 VS Code,并将它们保存为设置配置文件。您可以根据您正在处理的项目、您正在参加的课堂或您正在演示时,同时打开具有不同配置文件的多个工作区(文件夹)。
下面演示了如何为 Web 开发环境自定义 VS Code 并从中创建设置配置文件。
- 这里显示了您如何轻松地从开发配置文件更改为演示配置文件。
- 您可以同时在 Web 开发配置文件中打开您的 React 项目,并在 Python 课堂配置文件中打开 Python 课堂项目,如下图所示。
您可以使用设置中的以下颜色自定义键来自定义设置配置文件状态栏条目的前景色和背景色。
随着我们持续迭代编辑会话体验,请试用并经由issue #141293 中的评论与我们分享您的反馈。
扩展创作
您可以使用“设置”齿轮菜单中“设置配置文件”子菜单中提供的删除设置配置文件...操作来管理和删除设置配置文件。
即使您可以按配置文件自定义 VS Code,但有些设置只能在应用程序级别进行自定义。例如,所有应用程序范围的设置(如 update.mode
、语言包扩展、设置同步启用和工作区信任状态)都在应用程序级别跨所有配置文件进行自定义。
const data: vscode.DataTransfer = ...;
for (const [mime, item] of data) {
const str = await item.asString();
...
}
在 Web 版和桌面版 VS Code 之间访问编辑会话
在这个里程碑中,我们宣布了 VS Code 中编辑会话的预览版。编辑会话使您在任何可用 VS Code 的地方(无论是 Web 版 VS Code、桌面版 VS Code 还是跨不同机器)继续处理仓库时,都可以携带未提交的更改。
例如,您可以使用编辑会话来传输和访问工作更改
从 github.dev 中的仓库到该仓库的本地桌面克隆。
从 Windows 设备上的仓库克隆到 macOS 设备上的该仓库克隆。
编辑会话目前在 workbench.experimental.editSessions.enabled
设置的背后处于预览阶段。在此初始版本中,您可以使用以下命令来存储和恢复您的工作更改
编辑会话:存储当前编辑会话
编辑会话:恢复最新编辑会话
要开始使用编辑会话,请使用编辑会话:存储当前编辑会话命令,并在提示时使用 GitHub 或 Microsoft 身份验证登录。然后,在另一台机器或 VS Code 实例上的仓库中使用编辑会话:恢复最新编辑会话命令,将所有修改文件的有效内容恢复到您的工作区。您可以随时使用编辑会话:退出命令退出编辑会话。
"notebookRenderer": [
{
"id": "sample.markdown-it.emoji-extension",
"displayName": "Markdown it Emoji renderer",
"entrypoint": {
"extends": "vscode.markdown-it-renderer",
"path": "./out/emoji.js"
}
}
]
随着我们不断迭代编辑会话体验,请尝试一下并通过在问题 #141293 中评论与我们分享您的反馈。
可迭代的 vscode.d.ts 集合类型
import type * as MarkdownIt from 'markdown-it';
import type { RendererContext } from 'vscode-notebook-renderer';
interface MarkdownItRenderer {
extendMarkdownIt(fn: (md: MarkdownIt) => void): void;
}
export async function activate(ctx: RendererContext<void>) {
// Acquire the base renderer
const markdownItRenderer = await ctx.getRenderer('vscode.markdown-it-renderer') as MarkdownItRenderer | undefined;
if (!markdownItRenderer) {
throw new Error(`Could not load 'vscode.markdown-it-renderer'`);
}
// Load our Markdown-It extension
const emoji = require('markdown-it-emoji');
// Call the base renderer's extension method (extendMarkdownIt) to augment
// the Markdown-It with emoji support.
markdownItRenderer.extendMarkdownIt((md: MarkdownIt) => {
return md.use(emoji, {});
});
}
为了更轻松地使用 vscode.d.ts
中的集合类型,本次迭代我们使它们都可迭代。这允许您将 for...of
循环和扩展操作符与这些类型一起使用
查看Notebook Extend Markdown Renderer 示例,了解扩展 VS Code 内置 Markdown-It 渲染器的完整示例。
新可迭代类型的完整集合是
DiagnosticCollection
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');
}
...
}
}
DataTransfer
EnvironmentVariableCollection
.vscode-high-contrast-light .error {
color: red;
}
TestItemCollection
可扩展的笔记本渲染器
笔记本渲染器允许扩展自定义单元格和输出在笔记本中的渲染方式。本次迭代,我们扩展了笔记本渲染器 API,允许一个渲染器增强另一个渲染器,包括 VS Code 的一些内置渲染器。这允许扩展为笔记本渲染添加新功能,而无需重新实现一个完整的渲染器。它还提供了更好的用户体验,因为用户无需在新的渲染器之间切换即可看到正确渲染的内容。
笔记本扩展 Markdown 渲染器示例展示了扩展如何通过表情符号支持来扩展 VS Code 内置的 Markdown 渲染器。让我们快速看看关键部分!
可扩展笔记本渲染器的 API 被有意地松散定义。首先,我们的扩展需要贡献一个新的笔记本渲染器。因为我们正在扩展一个现有渲染器,所以我们在这里使用 entrypoint
字段来指定要扩展的渲染器 ID(在本例中为 VS Code 的内置 vscode.markdown-it-renderer
)以及要加载的渲染器脚本路径
JSON 单词模式更改
每当 vscode.markdown-it-renderer
被激活时,此渲染器也将被激活。
现在,要扩展 vscode.markdown-it-renderer
,我们的渲染器可以调用基础渲染器上的一个方法。此方法是基础渲染器特有的。在本例中,我们首先使用 getRenderer
获取基础渲染器,然后在其上调用 extendMarkdownIt
以增强它用于渲染的 Markdown-It 实例。
依赖于单词模式的扩展,例如代码补全中的默认替换范围,需要更新其实现以明确声明所有补全的替换范围。
调试适配器协议
- 这里需要注意的关键部分是
extendMarkdownIt
只是基础渲染器返回的一个方法。其他可扩展渲染器可以轻松返回自己的扩展点。 - 请查看笔记本扩展 Markdown 渲染器示例,以获取扩展 VS Code 内置 Markdown-It 渲染器的完整示例。
- 从 DataTransfers 读取外部文件
提议的 API
扩展现在可以使用 DataTransfer
读取外部文件。这可以在树拖放 API 以及拖放到编辑器 API 提案中使用。
- 找到您想尝试的提案,并将其名称添加到
package.json#enabledApiProposals
中。 - Web 视图中的高对比度浅色主题
- 现在,Web 视图可以使用
vscode-high-contrast-light
CSS 类来定位高对比度浅色主题。
您不能发布使用提议 API 的扩展。在下个版本中可能会有重大更改,我们绝不希望破坏现有扩展。
vscode-high-contrast-light
类会自动添加到 webview 的 body
元素中。
测试项标签中的图标
标准 $(icon)
格式的 Codicons 现在可以在 TestItem.label
中使用,以在“测试资源管理器”视图和测试结果中显示图标。
/**
* 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,
_ranges: readonly vscode.Range[],
dataTransfer: vscode.DataTransfer,
_token: vscode.CancellationToken
): void | Thenable<void> {
dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
dataTransfer.set('text/plain', new vscode.DataTransferItem(this.count++));
}
async provideDocumentPasteEdits(
_document: vscode.TextDocument,
_ranges: readonly vscode.Range[],
dataTransfer: vscode.DataTransfer,
_token: vscode.CancellationToken
): Promise<vscode.DocumentPasteEdit | undefined> {
const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
if (!countDataTransferItem) {
return undefined;
}
const textDataTransferItem = dataTransfer.get('text') ?? dataTransfer.get('text/plain');
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 { insertText: snippet };
}
}
export function activate(context: vscode.ExtensionContext) {
// Enable our provider in plaintext files
const selector: vscode.DocumentSelector = { language: 'plaintext' };
// Register our provider
context.subscriptions.push(
vscode.languages.registerDocumentPasteEditProvider(
selector,
new CopyCountPasteEditProvider(),
{
pasteMimeTypes: ['text/plain']
}
)
);
}
源代码管理输入框启用
扩展作者现在可以使用 enabled
属性切换源代码管理视图中输入框的启用状态。
JSON 单词模式更改
每种语言都带有一个单词模式,用于定义在该语言中哪些字符属于一个单词。JSON 与所有其他语言不同,因为它包含了字符串字面量的引号和完整的字符串字面量内容。现在它遵循其他语言,只包含字母、数字和连字符。
此更改将修复展开选择(命令:扩展选择)时的问题,允许字符串内的单词补全,并修复一些代码建议异常。
依赖于单词模式(例如代码补全中的默认替换范围)的扩展需要更新其实现,以明确指定所有补全的替换范围。
调试适配器协议
import * as vscode from 'vscode';
await vscode.commands.executeCommand('workbench.experimental.requestUsbDevice', {
filters: [
{ vendorId: 0x404 } // Your custom filter or empty if you want users to select any device
]
});
为了为步入目标功能提供更好的用户体验,DAP 的 StepInTarget
类型中添加了额外信息。通过 line
、column
、endLine
和 endColumn
这四个属性,步入目标现在可以链接到相应的源代码范围。
const devices = await navigator.usb.getDevices();
// Do something with devices
将程序参数传递给调试目标受到两个相互冲突的目标的阻碍:一些用户希望能够将所有字符传递给调试目标,而另一些用户则希望使用某些字符与底层 Shell 进行交互。为了更好地支持这两种用例,我们正在开发 DAP 的 runInTerminal
请求,以控制程序参数中特殊字符的转义。一项提案已可用。如果您是对此 DAP 附加功能感兴趣的调试扩展作者,我们期待您的反馈。
此外,我们还解决了调试适配器协议的几个文档问题。其中包括对“客户端”和“falsey”术语的澄清、对校验和和日期字符串的更精确规范,以及对 Source.origin
的措辞改进。
工程
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试它们。一如既往,我们希望得到您的反馈。以下是试用提议 API 的步骤
文档
找到您想要尝试的提案,并将其名称添加到 package.json#enabledApiProposals
中。
使用最新的 vscode-dts 并运行 vscode-dts dev
。它将下载相应的 d.ts
文件到您的工作区。
重要修复
- 您现在可以针对该提案进行编程。
- 您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
- 粘贴编辑提供程序
- 我们更新了
documentPaste
API 提案,使其更容易正确实现,特别是在处理多个光标时。 - 提醒一下,此 API 允许扩展在文本编辑器中挂钩复制和粘贴。扩展可以使用它来修改粘贴时插入的文本。文档粘贴扩展示例展示了更新后的 API 的实际应用。
- Web 上的 WebUSB、WebSerial 和 WebHID 访问
- 现在,实验性地支持从Web 扩展使用 WebUSB、Web Serial 和 WebHID。
- 要访问这些 API,您的扩展首先需要通过运行以下命令之一来请求访问所需设备
- workbench.experimental.requestUsbDevice
- workbench.experimental.requestSerialPort
致谢
workbench.experimental.requestHidDevice
这些命令将提示用户选择设备。每个命令都将设备过滤器列表作为其参数。例如
启用将代码作为Web 扩展运行的扩展的扩展作者 (以下列表是 2022 年 6 月 7 日至 7 月 4 日期间的)
- 命令完成后,您的扩展可以使用普通的 Web API 访问用户已授权访问的任何设备
- Django 支持 (Al Mahdi)
- 所有常规 Web 设备 API 都应该工作,但像 requestDevice 这种需要向用户显示 UI 元素的 API 除外。
- 目前,此功能仅在 Web 上可用,并且支持仅限于 Chrome 和 Edge 浏览器。另外请记住,此功能仍处于实验阶段,因此我们可能会迭代其设计。尝试一下并分享您的反馈!
- Electron 18 更新
- 在此里程碑中,我们完成了将 Electron 18 打包到 VS Code 桌面版中的探索,我们要感谢所有参与 Insiders 自托管的人员。此更新附带 Chromium
100.0.4896.160
和 Node.js16.13.2
。 - TypeScript 编辑和重构
- 有两个新主题侧重于 VS Code 中的 TypeScript 编辑和重构。在那里,您将了解 TypeScript 特定的功能,例如内联提示、CodeLens 和格式化选项,以及可用的代码重构。
- 重要修复
- 109565 使用 Caps Lock 切换输入源时,终端总是显示大写字母
- 146491 活动菜单和非活动菜单之间的颜色差异丢失
- 149538 在中国无法登录 Microsoft 或 GitHub 帐户
- 149890 无法将项目拖放到空的树视图中
- 150934 RPM 不应将捆绑库列为“提供”
- 151158 保存笔记本时在未命名笔记本中保留选定的内核
- 151664 改进屏幕阅读器单步调试代码时的公告效率
- 151739 首次回复评论串时 workbench.action.submitComment 不起作用 & 编辑评论时令人困惑
- 152067 仅在评论展开时显示评论串范围
- 152141 进程退出时删除任务状态
- 152642 添加了一个按钮,单击即可删除监视表达式
- 致谢
- 最后但同样重要的是,衷心感谢 VS Code 的贡献者。
- Web 扩展
- 为支持扩展作为Web 扩展运行代码的扩展作者(以下列表是 2022 年 6 月 7 日至 7 月 4 日期间的)
- Pipeline Editor (Alexey Volkov)
- Django Support (Al Mahdi)
- ROOT File Viewer (Alberto Pérez de Rada Fiol)
- Thirft Formatter (alingse)
- Smarty Template Support (Aswin Kumar)
- Sort Editors (Aswin Kumar)
- Vetur 扩展 (zardoy)
问题跟踪
对我们的问题跟踪的贡献
拉取请求
对 vscode
的贡献
- @a-stewart (Anthony Stewart)
- 在 MD 生成的 HTML 属性周围添加更多清理 PR #149100
- 偏好设置页面中的 Markdown 描述 PR #152860
- 删除终端中的重复声明 PR #153280
- @alanrenmsft (Alan Ren): 为选择框添加 aria-description 支持 PR #152251
- @andrewbranch (Andrew Branch)
- [typescript-language-features] 传递所有
typescript.unstable.*
设置 PR #151472 - [typescript-language-features] 添加 autoImportFileExcludePatterns 设置 PR #153160
- [typescript-language-features] 传递所有
- @babakks (Babak K. Shandiz)
- 优化 PR 模板选择器 PR #151415
- [markdown] 忽略链接文本中的括号 PR #151610
- 添加选项以在状态更改后始终显示测试 PR #152331
- 🎁 在操作栏命令中添加“移除表达式”到调试监视表达式 PR #152861
- 🔨 在环绕代码片段选择器上显示“无可用代码片段” PR #152892
- @Balastrong (Leonardo Montini): 添加命令以在亮/暗色主题之间切换 PR #151554
- @CGNonofr (Loïc Mangeonjean): 在 monaco api 中添加 removeAllMarkers 方法 PR #151237
- @gjsjohnmurray (John Murray):
保持编辑器打开
->禁用预览模式
(修复 #152240) PR #152322 - @guiherzog (Guilherme Herzog): 提高 CompressibleAsyncDataTree 的性能 PR #152961
- @jeanp413 (Jean Pierre)
- 修复终端无法正确恢复的问题 PR #149621
- 修复终端快速选择索引 PR #152699
- 修复分离终端编辑器时不会触发 vscode.window.onDidCloseTerminal 事件的问题 PR #152791
- @JohnnyCrazy (Jonas Dellinger): 完整编辑器可用作 Git 提交消息编辑器 PR #95266
- @jramsay (jram): [npm 扩展] 在工作区中检测 npm 脚本时排除顶级 npm_modules PR #150205
- @laurentlb (Laurent Le Brun): 评论: 换行非 Markdown 内容 PR #152987
- @leopoldsedev (Christian Leopoldseder)
- 修复 #151515 PR #151590
- 修复 #148150 PR #151594
- 实现清除键盘快捷方式搜索历史的动作 PR #151607
- @MachineMitch21 (Mitch Schutt): 拖动超过 1500 毫秒后将焦点设置到选项卡编辑器 PR #149604
- @mbelsky (Max Belsky): 支持
转换为烤肉串式命名
PR #147956 - @Mingpan
- 并在并排差异编辑器中通过箭头撤消更改 PR #151826
- 添加配置以禁用差异视图中的箭头 PR #153199
- @MonadChains (MonadChains): 修复当 editor.wrappingIndent == "same" 时缺少水平括号指南的问题 PR #152529
- @prashantvc (Prashant Cholachagudda): 为扩展查询添加了
VSCode-SessionId
Issue2961 PR #153271 - @Priyankcoder (Priyank Rastogi): 将 latex 添加到 markdown 嵌入语言 PR #151732
- @qingpeng9802 (Qingpeng Li): 修复 symbolkind 图标 PR #152216
- @thegecko (Rob Moran): 添加 Web 命令以请求设备访问 PR #152310
- @TheV360 (V360): 修复某些情况下内联提示偏移 1px 的问题 PR #153424
- @tjx666 (余腾靖): 修复 tomorrow-night 主题中 jsx 文本前景色 PR #151478
- @ulugbekna (Ulugbek Abdullaev)
- 为获取仓库添加进度报告 PR #153082
- 为缩略图添加自动隐藏选项 (默认为 false),这 PR #153093
- @yiliang114 (jinjing.zzj): 修复: 拼写错误 PR #153229
- @yutotnh (yutotnh): 修复: 拼写错误 PR #153187
对 vscode-generator-code
的贡献
- @hawkticehurst (Hawk Ticehurst): 修复模板 README 中列出的错误键盘快捷方式 PR #354
对 vscode-js-debug
的贡献
- @jakebailey (Jake Bailey): 在 REPL 评估帧处停止 REPL 堆栈跟踪 PR #1263
对 vscode-pull-request-github
的贡献
- @blindpirate (Bo Zhang): 向作者显示拉取请求的关闭按钮 PR #3507
- @leopoldsedev (Christian Leopoldseder): 实现 .com 上可用的快速自指派链接 (#_3382) PR #3601
对 debug-adapter-protocol
的贡献
对 devcontainers/cli
的贡献
- @juzuluag (Juan Zuluaga): 添加多构建支持 PR #24