作者:VS Code 产品组
翻译/排版:Alan Wang
欢迎使用 2025 年 2 月发布的 Visual Studio Code!本版本带来了许多更新,我们希望你会喜欢。其中一些主要亮点包括:
Next Edit Suggestions(预览版) - Copilot 预测你可能进行的下一步编辑。
Agent 模式(预览版) - Copilot 可自主完成任务。
Notebooks 中的 Copilot Edits - 快速迭代编辑你的笔记本。
代码搜索 - 让 Copilot 为你的聊天提示找到相关文件。
终端智能感知(预览版) - 为你的终端提供丰富的补全支持。
拖放引用 - 在新编辑器中快速打开 Peek 引用。
Linux 自定义标题栏 - 默认启用对 Linux 的自定义标题栏支持。
未解决的诊断(预览版) - 提交时提示未解决的诊断。
源代码控制中的软删除 - 将未跟踪的文件移至回收站而不是删除它们。
自定义指令正式版 - 使用自定义指令来调整 Copilot 以满足你的需求。
如果你希望在线阅读这些发布说明,请访问 code.visualstudio.com 的更新页面。
Insiders 版本:想要尽快尝试新功能?你可以下载每日构建的 Insiders 版本,第一时间体验最新更新!
GitHub Copilot
Copilot 功能可能会经历不同的早期访问阶段,通常可以通过设置启用和配置。
阶段 | 描述 |
---|---|
实验版 | 功能仍在开发中,尚未准备好供普通用户使用。查看实验版本功能(@tag:experimental)。 |
预览版 | 该功能仍在优化中,但已可使用,欢迎提供反馈。查看预览版功能(@tag:preview)。 |
稳定版 | 该功能已准备好供普通用户使用。 |
Copilot Edits
上个月,我们在 VS Code Insiders 中引入了 Copilot Edits 的 Agent 模式。在 Agent 模式下,Copilot 可以自动在你的工作区中搜索相关上下文,编辑文件,检查错误,并在获得你的许可后运行终端命令,从而实现端到端的任务自动化。
注意:代理模式目前可在 VS Code Insiders 版中使用,并已开始逐步推广至 VS Code Stable。一旦 Agent 模式对你可用,你将在 Copilot Edits 视图中看到模式下拉菜单——只需选择 Agent 即可启用。
本月,我们对 UX 进行了多项改进:
终端命令现在会内联显示,方便你跟踪已执行的命令。
你可以在运行命令前,先在聊天回复中编辑建议的终端命令。
通过快捷键 ⌘Enter 确认终端命令的执行。
edit suggest terminal command
代理模式会自主搜索你的代码库,以查找相关上下文。展开消息即可查看执行的搜索结果。
我们还对 Agent 模式的提示和行为进行了多项改进:
现在,聊天中的 Undo 和 Redo 操作会撤销或重做聊天回复中对文件的最后一次编辑。这对于 Agent 模式非常实用,因为你可以仅撤销模型执行的特定步骤,而无需回滚整个聊天回复。
Agent 模式现在可以自动运行你的构建任务,或者在收到指令时执行。如发现模型在不应运行任务时执行了任务,你可以通过 github.copilot.chat.agent.runTasks
设置来禁用此功能。
了解更多有关 Copilot Edits Agent 模式 或阅读 Agent 模式公告博客。
注意:如果你是 Copilot Business 或 Enterprise 用户,你的组织管理员必须启用 Copilot“编辑器预览功能”,Agent 模式才能使用。
Copilot Edits 的 Notebook 支持(预览版)
我们在 VS Code Insiders 中引入了 Copilot Edits 的 Notebook 支持,作为一项预览功能。现在,你可以像编辑 notebook 文件一样直观地编辑 Notebook 文件。创建新笔记本,修改多个单元格的内容,插入和删除单元格,更改单元格类型。这项预览功能可为 数据科学 或 文档编写 提供流畅的工作流程。
注意:此功能目前仅在 VS Code Insiders 中提供,并需要使用 GitHub Copilot Chat 预发布版本。我们将继续优化体验,并计划在未来的稳定版本中正式推出。
Copilot Edits modifynotebook
优化的编辑器集成
我们对 Copilot Edits 在代码编辑器和 notebook 编辑器中的集成进行了优化:
应用更改时不再自动滚动,视图保持原位,让你更专注于具体的更改内容。
调整编辑审核操作名称:“Accept”→ “Keep”,“Discard”→ “Undo”,这样更能准确反映实际操作。Copilot Edits 的更改是实时应用并保存的,用户可以 选择保留或撤销这些更改。
在处理完一个文件后,系统会自动显示下一个文件,提高编辑效率。
以下视频演示了更改是如何实时应用并保存的。预览会动态更新,用户可以选择 “Keep” 保留更改,同时仍然可以撤销或进一步调整。
changes from Copilot Edits
焕新的 UI
为了将 Copilot Edits 与 Copilot Chat 统一,我们对 Copilot Edits 进行了界面升级。待发送的附件文件现在会以常规聊天附件的形式显示。只有被 AI 修改过的文件才会出现在更改文件列表中,该列表位于聊天输入框上方。
此外,你可以通过 chat.renderRelatedFiles 设置启用相关文件建议。启用后,相关文件建议会显示在聊天附件的下方。
移除 Copilot Edits 的限制
此前,在 Copilot Edits 中,最多只能向提示中附加 10 个文件。在本次更新中,我们移除了这一限制。此外,我们还移除了客户端每 10 分钟最多 14 次交互的速率限制。
请注意,服务器端的使用速率限制仍然适用。
自定义指令正式推出
设置:github.copilot.chat.codeGeneration.useInstructionFiles
自定义指令允许你调整 GitHub Copilot,使其聊天回复和代码建议更符合你和团队的工作方式。你可以在工作区内的 .github/copilot-instructions.md
文件中,使用 Markdown 格式描述你的具体需求。
在本次更新中,我们正式推出了基于 .github/copilot-instructions.md
的 自定义指令功能。请确保启用了 github.copilot.chat.codeGeneration.useInstructionFiles
设置,Copilot 将根据这些指令生成响应。
了解更多关于 Copilot 自定义指令。
更顺畅的聊天身份验证流程
如果你的源代码托管在 GitHub 仓库,你可以使用高级代码搜索、@github
聊天参与者等功能!
不过,对于私有 GitHub 仓库,VS Code 需要获得权限才能与 GitHub 交互。此前,VS Code 会通过弹出对话框进行身份验证,例如使用 @workspace
或 @github
提问,或使用 #codebase
工具。
为了提供更顺畅的体验,我们在聊天界面内引入了确认机制:
它不仅不像弹出对话框那样突兀,而且还具有新功能:
授权(Grant):你将按照之前的方式通过常规身份验证流程(通过弹出对话框)进行身份验证。
稍后(Not Now):VS Code 会记住你的选择,在下次 VS Code 窗口会话之前不会再次打扰你。唯一的例外是,如果某个功能需要额外的权限才能运行(例如
@github
),它仍会请求权限。不再询问(Never Ask Again):VS Code 会记住你的选择,并通过
github.copilot.advanced.authPermissions
设置将其持久化。任何需要此额外权限的功能将会失败。
需要注意的是,这个确认框并不代表确认或拒绝 Copilot(服务)访问你的仓库。这仅仅是 VS Code 中 Copilot 体验的身份验证方式。要配置 Copilot 可以访问的内容,请阅读关于内容排除的文档。
Copilot Chat 中的更高级代码库搜索
设置:github.copilot.chat.codesearch.enabled
当你在 Copilot Chat 查询中添加 #codebase
时,Copilot 会帮助你查找与聊天提示相关的代码,来自你工作区中的相关内容。现在,#codebase
可以运行工具,如文本搜索和文件搜索,以从你的工作区提取更多上下文。
请设置 github.copilot.chat.codesearch.enabled
来启用此功能。可用的工具列表包括:
基于嵌入的语义搜索
文本搜索
文件搜索
Git 修改过的文件
项目结构
读取文件
读取路径
工作区符号搜索
将文件夹附加为上下文
以前,你可以通过从 Explorer 视图拖放来将文件夹作为上下文附加。现在,你还可以通过选择 📎 图标或在聊天提示中输入 #folder:
后跟文件夹名称来附加文件夹。
Next Edit Suggestions(预览版)的折叠模式
设置:
github.copilot.nextEditSuggestions.enabled
editor.inlineSuggest.edits.showCollapsed
我们为 NES(Next Edit Suggestions)添加了折叠模式。启用此模式后,左侧编辑器边缘仅显示 NES 建议指示器。只有当按 Tab 键导航到该建议时,代码建议才会被显示。连续的建议会立即显示,直到某个建议未被接受为止。
NES collapsed mode
折叠模式默认是禁用的,你可以通过配置 editor.inlineSuggest.edits.showCollapsed
来启用它,或者也可以在 NES 边缘指示器菜单中启用或禁用该模式。
更改自动补全模型
你之前可以更改 Copilot Chat 和 Copilot Edits 的语言模型,现在你还可以更改内联建议的模型。
另外,你可以通过命令面板中的更改自动补全模型(Change Completions Model)命令,或者通过标题栏 Copilot 菜单中的配置代码补全(Configure Code Completions)来更改用于代码自动补全的模型。
注意:可用模型的列表可能会随着时间变化。如果你是 Copilot Business 或 Enterprise 用户,你的管理员需要在 GitHub.com 上的 Copilot 策略设置中启用编辑器预览功能,为你的组织启用某些模型。
模型可用性
在本次发布中,我们为使用 Copilot 的用户添加了更多可选模型。以下模型现在可以在 Visual Studio Code 和 GitHub.com 聊天中的模型选择器中选择:
GPT-4.5(预览版):OpenAI 最新的 GPT-4.5 模型现在已向 Copilot Enterprise 用户开放。GPT-4.5 是一个大语言模型,具备先进的直觉、写作风格和广泛的知识能力。了解更多关于 GPT-4.5 模型的信息(GitHub 博客文章)。
Claude 3.7 Sonnet(预览版):Claude 3.7 Sonnet 现在已向所有付费 Copilot 用户开放。这个新的 Sonnet 模型支持 Copilot 中的思维模式和非思维模式。在初步测试中,我们在代理场景中看到了特别显著的改进。了解更多关于 Claude 3.7 Sonnet 模型的信息(GitHub 博客文章)。
Copilot Vision(预览版)
在本版本的 Copilot Chat 中,我们正在快速推出端到端的视觉支持。这使你可以在聊天提示中附加图像并与图像进行互动。例如,如果你在调试时遇到错误,可以附加一个 VS Code 的截图,并让 Copilot 帮助你解决问题。你还可以使用它来附加 UI 原型图,并让 Copilot 提供一些 HTML 和 CSS 代码来实现该原型。
你可以通过多种方式附加图像:
从操作系统或资源管理器视图中拖放图像
从剪贴板粘贴图像
附加 VS Code 窗口截图(选择 📎 图标 > 截图窗口)
如果所选模型当前不支持处理该文件类型,会显示警告。当前唯一支持图像附件的模型是 GPT-4.0,但支持 Claude 3.5 Sonnet 和 Gemini 2.0 Flash 的图像附件功能也将在不久后推出。目前,支持的图像类型包括 JPEG/JPG、PNG、GIF 和 WEBP。
Copilot 状态概览(实验功能)
设置:chat.experimental.statusIndicator.enabled
我们正在尝试一种新的集中式 Copilot 状态概览,提供快速概览你当前的 Copilot 状态和关键编辑器设置:
如果你是 Copilot Free 用户,显示配额信息
与编辑器相关的设置,如代码补全
使用其他 Copilot 功能的有用快捷键
此 Copilot 状态概览可通过状态栏中的 Copilot 图标访问。
使用 chat.experimental.statusIndicator.enabled
设置启用 Copilot 状态概览。
TypeScript 内联补全的上下文(实验功能)
设置:chat.languageContext.typescript.enabled
我们正在尝试为 TypeScript 文件增强内联补全和 /fix 命令的上下文。目前该实验仅适用于 Insider 版本,你可以通过 chat.languageContext.typescript.enabled
设置启用该功能。
拉取请求标题和描述的自定义指令
你可以通过 github.copilot.chat.pullRequestDescriptionGeneration.instructions
设置提供生成拉取请求标题和描述的自定义指令。你可以将该设置指向工作区中的文件,也可以将指令直接提供到设置中。了解更多关于在 VS Code 中自定义 Copilot 的信息。
以下示例展示了如何在设置中提供内联自定义指令。
{
"github.copilot.chat.pullRequestDescriptionGeneration.instructions": [
{
"text": "Prefix every PR title with an emoji."
}
]
}
生成标题和描述需要安装 GitHub Pull Requests 扩展。
可访问性
Copilot Edits 可访问性支持
我们使 Copilot Edits 更加无障碍。
现在,对于有修改的文件和更改的区域(插入、修改和删除),会有音频信号。
修改文件现在提供了可访问的差异查看器。就像在差异编辑器中一样,选择 F7 来启用它。
activeEditorState 窗口标题变量
我们新增了一个窗口标题变量 activeEditorState
,它可以向屏幕阅读器用户提供编辑器信息,如修改状态、问题数量,以及文件是否有待处理的 Copilot Edits。当处于屏幕阅读器优化模式时,该信息默认会附加,你也可以通过 accessibility.windowTitleOptimized
设置禁用它。
工作台
Linux 上的自定义标题栏
现在,Linux 上的自定义标题栏默认启用。自定义标题栏提供了布局控件、Copilot 菜单等功能。
你可以随时通过自定义标题栏的上下文菜单或将 window.titleBarStyle 配置为 native 来恢复原生标题装饰。
我们很高兴继续收到关于这一体验的反馈,并且已经根据现有的反馈开始着手改进,以便在未来的版本中优化此功能。
在次级侧边栏视图中使用标签
我们决定改变次级侧边栏视图的外观,将视图显示为标签而不是图标,类似于我们在面板区域中的设计。这样可以更容易区分不同的视图,例如 Copilot Edits 和 Copilot Chat 视图。你可以通过配置 workbench.secondarySideBar.showLabels
随时切换回显示图标的方式。
新的设置编辑器关键字匹配算法(预览版)
设置:workbench.settings.useWeightedKeySearch
我们添加了一种新的设置编辑器搜索算法,它优先显示更相关的关键字匹配。该搜索算法尝试以比之前更多的方式匹配设置 ID 和标签,同时它还会进一步过滤结果,以确保仅显示最匹配的项。
你可以通过启用 workbench.settings.useWeightedKeySearch
设置来尝试该预览功能。
new-settings-search
主题:浅粉色(vscode.dev 上的预览版)
在简易文件选择器中隐藏点文件的选项
当使用简易文件选择器时(无论是连接到远程服务器还是启用 files.simpleDialog.enable
时),你现在可以通过使用 显示/隐藏点文件 按钮来隐藏点文件。
编辑器
Peek 引用的拖放支持
现在,Peek 视图支持拖放功能。调用 Peek References、Peek Implementation 或其他任何 Peek 命令,然后将条目从其树状视图拖动到其他编辑器中打开。
drag and drop a peek reference
主题:GitHub Light 色盲版(Beta)(vscode.dev 上的预览版)
发生高亮延迟
编辑器中发生高亮的延迟现在默认设置为 0。这使得整体编辑器更加响应迅速。你仍然可以通过 editor.occurrencesHighlightDelay
设置来控制延迟。
源代码控制
更新的视图标题
当我们将 源代码控制图表视图 添加到 源代码控制视图 时,强调了视图标题的重复,如 “Source Control Repositories”、“Source Control” 和 “Source Control Graph”。在这一版本中,我们重新审视了视图的标题,确保它们更简短且不再重复视图标题:“Repositories”、“Changes” 和 “Graph”。
丢弃未跟踪更改的改进
设置:git.discardUntrackedChangesToTrash
多年来,我们收到了多次关于数据丢失的报告,因为丢弃未跟踪的文件会永久删除该文件,即使 VS Code 会显示一个模态对话框,清楚地表明该文件将被永久删除。
从这一版本开始,丢弃未跟踪的文件将尽可能将文件移至回收站/垃圾桶,这样文件可以轻松恢复。你可以通过 git.discardUntrackedChangesToTrash
设置禁用此功能。
诊断提交钩子(实验版)
设置:
git.diagnosticsCommitHook.Enabled
git.diagnosticsCommitHook.Sources
在这一版本中,我们引入了一个新的提交钩子,它会在更改的文件存在未解决的诊断时提醒你。这目前是一个实验性功能,可以通过 git.diagnosticsCommitHook.Enabled
设置启用。
默认情况下,提交钩子会针对任何错误级别的诊断进行提示,但你可以通过 git.diagnosticsCommitHook.Sources
设置自定义诊断的源和级别。试试看并告诉我们你的反馈。
Notebook
内联 notebook 差异视图(实验版)
设置:notebook.diff.experimental.toggleInline
现在,你可以为 notebook 启用内联差异视图。此功能使你可以在单一的内联视图中查看 notebook 单元格内的更改,而不是传统的并排比较方式。
通过将 notebook.diff.experimental.toggleInline
设置为 true
来启用此功能。然后,你可以通过编辑器右上角的菜单切换到内联差异视图。
toggl an edit suggestion
Notebook 内联值悬停
Notebook 内联值现在的装饰会被截断以适应视口的宽度,并且有丰富的悬停效果来显示完整的值,同时保持空白格式。这样可以保持像数据框架这样的变量形状,使得值一目了然,更容易阅读。
终端 IntelliSense(预览版)
设置:terminal.integrated.suggest.enabled
我们显著改进了 bash、zsh、fish 和 PowerShell 中的终端 shell 自动补全,通过添加补全规格(例如 git)、优化命令行解析以提供更好的建议,并增强了文件和文件夹的补全功能。你可以通过 terminal.integrated.suggest.enabled
启用此功能。
增强的 Fig 补全支持
我们利用 Fig 补全规格为特定 CLI 提供智能补全。之前我们只有少量支持,但在此次版本中,我们将以下 CLI 添加到了 VS Code 附带的列表中:
基础工具:
cat
,chmod
,chown
,cp
,curl
,df
,du
,echo
,find
,grep
,head
,less
,ls
,mkdir
,more
,mv
,pwd
,rm
,rmdir
,tail
,top
,touch
,uname
进程工具:
kill
,killall
,ps
包管理器:
apt
,brew
Node.js 生态:
node
,npm
,npx
,nvm
,pnpm
,yarn
SCM、语言、编辑器:
git
,nano
,python
,python3
,vim
网络:
scp
,ssh
,wget
除了新的规格,我们现在还支持生成器,它们通过在请求时运行命令动态生成补全项。一个实际的例子是展示 git checkout
的所有分支。
主题:宝石蓝(在 vscode.dev 上预览)
在后台,它运行 git --no-optional-locks branch -a --no-color --sort=-committerdate
来获取分支列表,然后将其处理为补全项。类似的方法也用于获取标签。
可配置的快速建议
设置:terminal.integrated.suggest.quickSuggestions
类似于编辑器,快速建议是在输入任何内容时自动显示 IntelliSense,而触发字符则是在输入像 \
或 -
这样的特定字符时触发。新的 terminal.integrated.suggest.quickSuggestions
设置允许精确控制何时应该呈现快速建议。
默认值启用了命令和参数的快速建议,现已默认禁用路径建议,因为我们听说路径建议可能会显得杂乱且令人沮丧,尤其是在它们不适用时。这是默认设置:
"terminal.integrated.suggest.quickSuggestions": {
"commands": "on",
"arguments": "on",
"unknown": "off"
}
内联建议检测
设置:terminal.integrated.suggest.inlineSuggestion
到目前为止,内联建议检测遇到的一个问题是,由于来自不同来源的建议相互竞争,导致了混淆。特别是在终端中输入时,通常会出现内联建议:
这些建议实际上是 shell 层级的功能(如 fish/zsh 中的自动建议、pwsh 中的预测等),对用户来说可能不太明显,尤其是当它们与 IntelliSense 一起呈现时。
IntelliSense 功能要求我们检测到这些内联建议,之前我们使用的简单实现只检查文本是否使用了淡色或斜体的 SGR 样式属性。事实证明,这种方法不够,特别是当用户自定义了样式时,fish shell 默认情况下也不会使用这些样式。我们现在通过分析命令行上下文和光标位置来检测大多数情况。
基于这种新的改进检测,内联建议现在作为顶部选项显示,并带有星形图标,这样可以更好地与编辑器的行为对齐,并且使用户更加清楚按下 Tab 键时将会发生什么。
默认情况下,始终将此建议显示为顶部建议,但可以通过 terminal.integrated.suggest.inlineSuggestion
进行配置。
详细的命令补全
现在,对于 bash 和 zsh 内置命令以及 PowerShell 命令的补全更加详细,提供了可用参数的详细信息。这些信息来自于 shell 的文档或帮助命令。
对于 bash,使用 help<command>
来获取基本的描述:
对于 zsh,使用 man zshbuiltins
来获取详细描述:
对于 PowerShell,完成建议中显示了 Get-Command
的更多属性:
改进的排序
命令补全现在具有改进的排序,具体包括:
具有更多详细信息的补全通常会出现在较少详细信息的补全之上
内建命令优先于来自
$PATH
的路径
对于路径,进行了以下改进:
以 _
开头的路径会受到惩罚,因为这通常表明它们是特殊的,一般不应该被频繁修改(例如,__init__.py
)。
排序时忽略标点符号,因此以 .
开头的文件将与其他文件混合排列。
CDPATH 支持
设置:terminal.integrated.suggest.cdPath
$CDPATH
环境变量是一个常见的 shell 特性,它包含一个由冒号分隔的路径列表,类似于 $PATH
,允许将其视为相对路径来进行导航,而无需考虑当前的工作目录。Fish shell 实际上在 cd
命令的自动补全中显示 CDPATH 条目:
现在我们支持在使用 cd
命令时显示 $CDPATH
条目作为自动补全项:
此功能在 Windows 上也适用(使用 ;
分隔符),并且不需要 shell 原生支持该功能,因为默认情况下是使用绝对路径。
通过 terminal.integrated.suggest.cdPath
设置进行配置。
绝对路径
绝对路径现已支持。
别名支持
命令别名现在也被 bash、zsh 和 fish 检测到,并且拥有一个新的独特图标:
选项和标志的区分
现在,CLI 选项(有值的)和标志(没有值的)在 UI 中通过不同的图标进行区分:
任务
任务重新运行操作
我们为终端添加了一个新的重新运行任务操作 ⌃⇧R。该操作出现在终端标签页的内联工具栏和终端的上下文菜单中。
terminal rerun task
调试
调试内联值悬停
如果启用了设置 debug.inlineValues
,内联值装饰现在会显示内联悬停,使得长值更容易一目了然。
语言
TypeScript 5.8
VS Code 现在包含了 TypeScript 5.8.2。这个主要更新带来了新的语言改进,包括改进了条件表达式中的类型检查,并支持编写符合 Node 新的 --experimental-strip-types 选项的代码。它还包括了若干工具改进和 bug 修复。
了解更多关于此次更新的详细信息,请查看 TypeScript 5.8 发布博客。
远程开发
远程开发扩展允许你使用开发容器、通过 SSH 连接的远程机器或远程隧道,或 Windows Subsystem for Linux (WSL) 作为完整功能的开发环境。
亮点包括:
Linux 旧版服务器的终止支持(EOL)
扩展的代理配置功能
你可以在远程开发发布说明中了解更多有关这些功能的信息。
企业支持
多行支持的允许扩展
你现在可以在 Windows 的组策略中使用多行字符串配置允许的扩展。这允许更灵活和广泛地配置允许的扩展。了解更多关于配置允许扩展的信息。
扩展贡献
Python
断开长字符串时自动插入引号
Pylance 现在支持在断开长字符串时自动插入引号,从而提供无缝的体验。
Pylance 内存消耗优化
对 Pylance 的内存消耗进行了优化,尤其是在处理大型工作区时。这项改进是在 Pyright 上进行的,Pyright 是支持 Pylance 语言服务器功能的静态类型检查器。
Python shell 集成改进
在修改 python.terminal.shellIntegration.enabled
后,你无需重新加载即可使更改生效。只需创建一个新的终端,即可在终端中的 Python REPL 上看到所需的更改。
Windows Git Bash 的正确工作区提示
使用 Git Bash 的 Windows 上的 Python 用户现在可以在其终端提示符中看到正确的工作目录。这些更改适用于参与了 pythonTerminalEnvVarActivation
实验的用户。
新的自动测试发现文件模式设置
现在,你可以通过在 python.testing.autoTestDiscoverOnSavePattern
设置中指定一个 glob 模式来精确控制哪些文件会触发自动测试发现。默认值设置为 **/*.py
。
从 settings.json
读取测试调试配置作为备用
我们现在会在 settings.json
和 launch.json
文件中查找测试调试配置,扩展了你定义这些配置的位置。
任务重新运行操作
改进的代理支持与 Electron fetch 采用
GitHub 身份验证扩展现在采用了 Electron 版本的 fetch 来进行网页请求。这有助于一些具有特定代理和防火墙设置的用户。如果你知道自己所在的环境有代理设置,并且在 VS Code 内无法认证到 GitHub,请不要犹豫,创建一个 issue!
扩展开发
身份验证
重要:我们正在将
AuthenticationForceNewSessionOptions
重命名为AuthenticationGetSessionPresentationOptions
,并暂时保留已弃用的AuthenticationForceNewSessionOptions
。这两者在功能上没有区别,因此这不是一个破坏性更改,但你应该更新代码,改用AuthenticationGetSessionPresentationOptions
,因为它将来会被移除。
查看这两个身份验证调用:
vscode.authentication.getSession(provider, scopes, { createIfNone: options });
vscode.authentication.getSession(provider, scopes, { forceNewSession: options });
createIfNone
和 forceNewSession
现在可以接受布尔值或 AuthenticationGetSessionPresentationOptions
:
/**
* Optional options to be used when calling {@link authentication.getSession} with interactive options `forceNewSession` & `createIfNone`.
*/
export interface AuthenticationGetSessionPresentationOptions {
/**
* An optional message that will be displayed to the user when we ask to re-authenticate. Providing additional context
* as to why you are asking a user to re-authenticate can help increase the odds that they will accept.
*/
detail?: string;
}
这是 createIfNone
的新添加,但对于 forceNewSession
来说,这是一个修改,原本它接受的是 AuthenticationForceNewSessionOptions
,该选项的签名与新的 AuthenticationGetSessionPresentationOptions
相同。
如果你明确使用了 AuthenticationForceNewSessionOptions
,你会看到它被标记为已弃用,你应该用 AuthenticationGetSessionPresentationOptions
替代它,因为 AuthenticationForceNewSessionOptions
将在未来的版本中被移除。
需要注意的是,这里唯一发生变化的是类型定义。没有运行时的变化,因此从这个角度来看,这不会是一个破坏性变更。
此外,authLearnMore
提议的 API 已经从 AuthenticationForceNewSessionOptions
更新为 AuthenticationGetSessionPresentationOptions
。
以下是一个利用 detail 和 learnMore 提议的示例:
改进的代码片段 API
现在,你可以控制插入代码片段时的空白字符规范化。这适用于 insertSnippet API 和 SnippetTextEdit API,并且可以控制附加行的缩进是否被调整。
const snippet = `This is an indented
snippet`;
// keepWhitespace: false, undefined
function indentedFunctionWithSnippet() {
return `This is an indented
snippet`; // adjusted indentation
}
// keepWhitespace: true
function indentedFunctionWithSnippet() {
return `This is an indented
snippet`; // original indentation
}
提议的 API
文本编码
我们新增了一个提议的 API,用于在 VS Code 中处理文本编码。
具体而言,这个新 API 允许:
获取
TextDocument
当前的编码以特定编码打开
TextDocument
使用特定编码将字符串编码为
Uint8Array
使用特定编码将
Uint8Array
解码为字符串
尝试一下,欢迎通过这个 GitHub issue 报告给我们你的反馈。
Shell 环境
扩展现在可以访问用户当前激活的 shell 环境信息,支持的 shell 包括 pwsh
、zsh
、bash
和 fish
,这些 shell 是从 VS Code 集成终端打开的。当 terminal.integrated.shellIntegration.enabled
被启用时才可用。
用户可以决定是否报告他们的 shell 环境信息,设置项为 terminal.integrated.shellIntegration.environmentReporting
。
试试看,并通过这个 GitHub issue 给我们反馈。
工程
Electron 34 更新
在本次里程碑中,我们将 Electron 34 更新推送给稳定版用户。此更新包括 Chromium 132.0.6834.196 和 Node.js 20.18.2。感谢所有在 Insider 版本上自托管并提供早期反馈的用户。
macOS 10.15 支持已结束
VS Code 1.97 是最后一个支持 macOS 10.15(macOS Catalina)的版本。更多信息请参考我们的常见问题解答。
开发时追踪泄漏的可释放资源
VS Code 使用可释放模式进行显式资源管理,例如关闭文件、清理 DOM 元素或移除事件监听器。如果不释放资源,将导致内存浪费,并且内存使用量会随着时间积累。
我们一直在寻找此类泄漏,并新增了一个检测工具。我们使用 FinalizationRegistry API,它可以告知我们何时某个对象被垃圾回收。如果该对象是一个未被释放的可释放资源,这就意味着我们存在内存泄漏。我们将这些信息收集并展示给 VS Code 开发人员,以便在开发过程中进行清理。
重要修复
感谢
最后,衷心感谢所有为 VS Code 做出贡献的人员。
问题跟踪
感谢以下人员为我们的问题跟踪做出的贡献:
Pull requests
vscode
贡献:
@a-stewart (Anthony Stewart):差异选择指示器线应使用
menu.separatorBackground
而不是menu.border
PR #228825@bchu1 (Bryan Chu):修复了在小地图中标题错位的问题 PR #217581
@cassidoo (Cassidy Williams):修复 #241903:在
settingsLayout.ts
中为 GitHub 添加覆盖选项 PR #241911@cdce8p (Marc Mueller):添加 panelTitleBadge 颜色变量 PR #240645
@cenviity (Vincent Ging Ho Yim):修复 editorOptions.ts 中的拼写错误 PR #239929
@cmbrose (Caleb Brose):更新 chat 的 newEditSession 命令以接受输入提示 PR #241796
@devm33 (Devraj Mehta):修复:将 electron 添加为 webpack 的外部依赖 PR #239134
@dmotte (Motte):修复
terminal.integrated.confirmOnExit
的行为 PR #240074@dvangonen (Daniil Vangonen):删除 body 中不必要的类 PR #240633
@gabritto (Gabriela Araujo Britto):回退 “[typescript-language-features] 可展开的悬停 (#_228255)” PR #240011
@gjsjohnmurray (John Murray)
为
scm/resourceGroup/context
菜单命令提供多选支持 (修复 #92337) PR #192172添加
scmResourceGroupState
上下文键 (#_192009) PR #194804SCM - 精简 SCM 视图中的标题 PR #230693
修复键盘快捷方式编辑器中的“显示用户键绑定”选项(修复 #240068) PR #240085
修正“添加触发断点…”中的“OK”大小写问题(修复 #240490) PR #240492
@hickford (M Hickford):在“tunnel user show”中记录提供程序 PR #240692
@ihavecoke (ihavecoke):将
tab_size
设置限制在 1 和 16 之间 PR #228957@jakebailey (Jake Bailey):在扩展主机开发中保留
--disable-extensions
参数 PR #240415@jamestut (James Nugraha):在初始化分词器之前计算 TextModel 限制 PR #240919
-
修复终端拆分视图中可丢弃对象泄漏的问题 PR #241597
修复终端链接悬停问题,内容在悬停前就会隐藏 PR #241599
修复时间线视图泄漏事件监听器的问题 PR #241607
@KexyBiscuit (Kexy Biscuit a.k.a. るる):允许检测 powershell-preview snap PR #240054
@klaussner (Christian Klaussner):修复 macOS 上交通信号灯居中的问题 PR #212471
@naman108 (Natha Paquette):存储 URI 文档中的拼写错误 PR #241600
@nknguyenhc (Nguyen):扩展详细内容超出了容器范围 PR #240134
@notoriousmango (Seong Min Park)
使 Command Center 调试启动器首先提供最近使用的配置 PR #240744
采用 Markdown 使用 vscode 日志输出通道 PR #241342
@pouyakary (Pouya Kary ✨):特性:自定义迷你地图章节标题标记检测正则表达式 ✨ PR #210271
@rgrunber (Roland Grunberg):暴露 adjustWhitespace 给 TextEditor API PR #234858
@silamon (Simon Lamon):差异编辑器:将
1 files
更正为1 file
PR #240092@simon-id (simon-id):修复:工作台搜索使用正确的 findMatch 颜色(修复 #237909) PR #237910
@SimonSiefke (Simon Siefke):修复设置指示器中的内存泄漏问题 PR #236417
@ssigwart (Stephen Sigwart):修复在尝试缩进时出现的意外标签补全问题 PR #136572
@SunsetTechuila (Grigory):功能(命令):添加
insertFinalNewLine
PR #241126@tcvdh (Thijs van den Heuvel):修复:等待清除命令执行完成后再重用终端 PR #240970
@terrymun (Terry Mun-Andersen):修复:删除
CONTRIBUTING.md
中多余的反引号 PR #240305@tmm1 (Aman Karmani):tsb:修复删除并重新添加的源文件未重新生成的问题 PR #238409
-
添加 Node 作为 npm 脚本运行器 PR #236967
添加 Node 作为 npm 脚本运行器(第二版) PR #240527
@zardoy (Vitaly):[Git] 迁移到在拉取时使用 git 自动存储以提高性能 PR #187850
vscode-css-languageservice
贡献:
- @GauravB159 (Gaurav Bhagchandani):添加了 lab() 和 lch() 颜色预览 PR #306
vscode-eslint
贡献:
@edemaine (Erik Demaine):支持 Civet 的探测功能 PR #1965
@mustevenplay (mustevenplay):添加 TypeScript 配置文件检测 PR #1968
vscode-hexeditor
贡献
- @tomilho (Tomás Silva):将“Hex Compare Selected”移到“Compare Selected”下方 PR #561
vscode-jupyter
贡献:
- @thesuperzapper (Mathew Wicks):修复读取
JUPYTER_RUNTIME_DIR
和XDG_RUNTIME_DIR
PR #16451
vscode-languageserver-node
贡献:
@mciccale (Marco Ciccalè Baztán):小的拼写错误修正:semaphore.ts PR #1618
vscode-mypy
贡献:
@hamirmahal (Hamir Mahal):修复:在 CI 中使用已弃用的 Node12 PR #336
@ivirabyan (Ivan Virabyan):添加 dmypy 状态文件设置 PR #347
vscode-pull-request-github
贡献:
- @christianvuerings (Christian Vuerings):修复使用自定义 SSH 时复制 GitHub 永久链接的问题 PR #6669
vscode-python-debugger
贡献:
- @TCPsoftware (tcpsoft): 将
"args": "${command:pickArgs}"
设置为默认的调试配置 PR #548
vscode-vsce
贡献:
@mohankumarelec (mohanram):更新了 semver 比较 PR #1078
@stevedlawrence (Steve Lawrence):允许生成可重现的 .vsix 包 PR #1100
debug-adapter-protocol
贡献:
@angelozerr (Angelo):添加 IntelliJ / LSP4IJ DAP 支持 PR #529
@samisalreadytaken:将 Squirrel 调试器添加到 adapters.md 中。 PR #530
@SpartanJ (Martín Lucas Golini):更新 tools.md,添加一个新的 DAP 客户端:ecode PR #526
@sssooonnnggg (Song):杂务:添加 Luau 调试器 PR #516
@theIDinside (Simon Farre):将 Midas 添加到调试适配器列表,并支持 VSCode PR #528
language-server-protocol
贡献:
@ind1go (Ben Cox): 工作区诊断中的拼写错误 PR #2086
@MuntasirSZN (Muntasir Mahmud):功能:在服务器列表中添加 Copilot 语言服务器 PR #2107
@Szasza (Szasza Palmer):将 Wing 语言服务器添加到服务器列表 PR #2101
@the-mikedavis (Michael Davis):明确 $0 不应使用其他片段语法 PR #2087
@yassun7010 (yassun7010):将 Tombi 添加到 LSP 列表 PR #2089
python-environment-tools
贡献
- @pantheraleo-7:添加对检测
$VIRTUAL_ENV
的支持 PR #181