版本亮点深度解析:Apple Silicon、终端会话恢复与扩展 API 演进)
文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载Visual Studio Code 1.54 版本2021 年 2 月带来了首个 Apple Silicon 稳定版构建、终端进程跨窗口重载恢复、Product Icon Themes 产品图标主题支持以及面向扩展作者的编辑器工具栏溢出规则与 Inline Values Provider 提议 API 等关键更新。本文以本仓库中的 release-notes/v1_54.md 为主体结合 终端进阶文档、产品图标主题指南、贡献点参考 与 远程开发版本说明 等仓库资料逐项剖析每个功能点的配置方式、设置取值与底层实现思路帮助你快速掌握该版本的全部能力。Apple Silicon 原生支持与 Universal 构建本版本首次发布了 Apple SiliconM1 芯片的稳定版构建。使用 M1 芯片的 Mac 用户现在可以不再依赖 Rosetta 模拟运行 VS Code从而获得更好的性能与更长的电池续航。官方在迭代期间通过 Insiders 构建进行了社区自托管self-hosting并在早期收集并修复了相关问题。macOS 的默认下载现在是一个Universal 构建可以在所有 Mac 上原生运行Downloads 页面还额外提供了面向 Intel 或 Apple Silicon 的架构专用构建体积比 Universal 包更小。对于国内开发者可以在 VS Code 官网的 Downloads 页面直接选择Apple Silicon或Intel标签页下载对应架构的安装包如果分发或镜像场景需要兼顾两种架构则选择 Universal 包。可访问性改进工具栏与标签区只占一个 Tab 停靠位工作台Workbench中的所有工具栏现在遵循标准导航行为工具栏整体在 Tab 顺序中只占一个位置进入后用方向键在工具栏内部移动焦点。标签区tabs area也做了同样的调整——整个标签区只占一个 Tab 停靠位标签之间的切换改为使用左右方向键。这一改动大幅减少了工作台中的 Tab 停靠点数量使键盘与屏幕阅读器用户更易于在各大区域间导航。Windows 上更符合屏幕阅读器预期的单词导航Windows 平台的单词导航行为被对齐到屏幕阅读器Screen Reader对 Electron 应用的预期现在使用单词导航时每个单词都会被屏幕阅读器正确朗读。由于实现方式变更以下命令被标记为弃用短期内仍可用但未来可能被移除cursorWordAccessibilityLeftcursorWordAccessibilityLeftSelectcursorWordAccessibilityRightcursorWordAccessibilityRightSelect非 Windows 平台此前行为已符合预期本次未做改动。视图与按钮的角色role改进根据用户反馈多个视图和按钮的 ARIA role 得到优化Activity Bar、Side Bar与Panel现在使用role:none减少屏幕阅读器的冗余播报Activity Bar 中的Manage与Accounts按钮现在会正确宣布自身带有弹出popup行为。集成终端会话持久化与性能优化窗口重载后保留终端进程本地终端进程现在可以在窗口重载例如安装扩展后要求 Reload时被恢复终端会重新连接且终端的 UI 状态——包括活动标签页和分栏终端的相对尺寸——都会被还原。这一行为可通过设置terminal.integrated.enablePersistentSessions关闭设为false。仓库中的 终端进阶文档 对持久会话机制做了更完整的说明终端支持两类持久会话类型行为进程重连Process reconnection窗口重载如安装扩展后时重连到之前的进程并恢复其内容进程复活Process revive重启 VS Code 时恢复终端内容并用原始环境重新启动进程相关可调设置包括设置作用terminal.integrated.enablePersistentSessions总开关默认开启设为false可同时禁用两类持久会话terminal.integrated.persistentSessionScrollback控制恢复的滚动缓冲scrollback量terminal.integrated.persistentSessionReviveProcess可独立配置进程复活行为terminal.integrated.hideOnStartup控制启动时终端视图是否显示never默认永不隐藏、whenEmpty无持久会话恢复时才隐藏、always即使有持久会话也隐藏此外终端标签页可以拖拽到其他 VS Code 窗口之间移动也可通过命令面板的Terminal: Detach Session与Terminal: Attach to Session命令手动完成。Windows 终端性能改进得益于新的终端进程布局见下文“Engineering”章节的New terminal process layout终端进程产生的 pty 数据事件现在能更快地被处理。由于 Windows 的 conpty 产生的事件更小、更频繁这一优化在 Windows 上收益尤为明显。环境变更后自动重启终端扩展可以影响终端的运行环境例如内置 Git 扩展注入GIT_ASKPASS让 VS Code 充当 Git 认证提供方以省去登录步骤。此前终端环境过期时只会在右上角显示一个 ⚠️ 图标1.54 改为尚未被交互过的终端在环境过期时会被自动重启。这可能带来少量闪烁但让扩展与终端的集成更加无缝——例如 WSL 窗口中的第一个终端在重启发生前不再出现 Git 认证错误。关于扩展环境贡献environment variable collection的更多细节可参考 docs/terminal/advanced.md 的“Extension environment contributions”小节如果环境变化后自动重启不安全终端状态栏会显示警告图标悬停可查看详情并手动重启。Workbench 工作台改进Emmet合并换行命令、支持多扩展路径Wrap with Abbreviation与Wrap Individual Lines with Abbreviation两个命令被合并为单一的Wrap with Abbreviation命令消除了选择困惑该命令现在也能正确显示换行空白预览。emmet.extensionsPath设置从仅接受字符串扩展为可以接受路径数组。结合 Settings Sync开发者可以为不同机器指向不同的 Emmet 代码片段snippet文件而无需逐台机器修改设置。自定义 Emmet 代码片段需要定义在名为snippets.json的 JSON 文件中emmet.extensionsPath指向包含该文件的目录示例见 docs/languages/emmet.md{ html: { snippets: { ull: ulli[id${1} class${2}]*2{ Will work with html, pug, haml and slim }, oll: olli id${1} class${2} Will only work in html /ol, ran: { Wrap plain text in curly braces } } }, css: { snippets: { cb: color: black, bsd: border: 1px solid ${1:red}, ls: list-style: ${1} } } }Product Icon Themes产品图标主题首批产品图标主题在扩展市场中上线。产品图标Product Icons是 VS Code 视图中使用的一整套内置图标例如筛选操作按钮、视图图标、状态栏图标、断点图标以及树/编辑器中的折叠图标文件图标File Icons与扩展自行贡献的图标不在产品图标主题覆盖范围内。完整的产品图标主题开发指南见 api/extension-guides/product-icon-theme.md。选择或查找主题的方式从命令面板或设置齿轮菜单运行Preference: Product Icon Theme命令。从扩展作者视角看声明产品图标主题需要在package.json中使用productIconThemes贡献点参考 api/references/contribution-points.md 的contributes.productIconThemes小节{ contributes: { productIconThemes: [ { id: elegant, label: Elegant Icon Theme, path: ./producticons/elegant-product-icon-theme.json } ] } }主题定义文件通过fonts声明一个或多个字形字体建议使用 WOFF 格式与iconDefinitions为 VS Code 的图标 ID 指定fontCharacter与fontId两部分来重新映射图标VS Code 内置的默认产品图标主题即由 Codicon 图标字体构成。若定义文件以*product-icon-theme.json命名编辑时会获得属性补全、悬停提示与校验支持通过kb(workbench.action.debug.start)启动扩展开发主机即可实时预览图标改动。when 子句的 IntelliSense 补全VS Code 使用 when 子句when-clause来启用/禁用键位绑定扩展也用 when 子句控制菜单与视图的贡献。1.54 起编辑器会在keybindings.json等位置为这些 when 子句提供补全提示大幅降低了编写成本。when 子句的完整语法逻辑、相等、比较、匹配、in/not in运算符与全部上下文键列表见 api/references/when-clause-contexts.md。Open Editors 视图新增未命名文件操作Open Editors视图标题区新增了New Untitled File操作方便从资源列表直接创建未命名文件。应用菜单设置更新window.menuBarVisibility设置的取值被重新梳理原default选项更名为classic应用菜单中的Show Menu Bar项现在在classic与compact两个选项间切换若要完全隐藏菜单栏可以修改设置或在compact模式下使用 Activity Bar 的上下文菜单。自定义布局文档 给出了该设置的完整取值取值行为classic菜单栏显示在窗口顶部仅在进入全屏时隐藏visible菜单栏始终可见包括全屏模式toggle菜单栏隐藏单按Alt键显示compact菜单移入 Side Bar侧边栏hidden菜单栏始终隐藏Webview 缓存改进Webview 从磁盘重新加载本地文件时现在使用ETag判断文件是否变化未变化则不再重复读取文件。这能消除不必要的数据传输、提升响应速度尤其对远程工作区收益明显。注意该缓存仅作用于已有 webview 重新加载资源的场景不适用于新建的 webview。工作区搜索操作变更workbench.view.search命令不再把选中文本填入搜索输入框而是只打开输入框若要使用选中文本创建新搜索并遵循search.mode设置应使用workbench.action.findInFiles。仅修饰键的键位绑定现在可以为重复修饰键定义键位绑定例如shift shift、alt alt、ctrl ctrl或cmd cmd/meta meta/win win。在keybindings.json中手动录入即可{ key: shift shift, command: workbench.action.quickOpen }列表/树 UI 更新破坏性变更列表/树样式更新为贴合原生焦点与选中指示聚焦元素将以轮廓色渲染。主题作者需要相应调整把对list.focusBackground颜色的自定义改为quickInput.list.focusBackground颜色。Table widget远程端口表视图新引入的 table widget 构建在现有 list widget 之上能以渲染列表元素相同的性能渲染表格数据。目前它用于 Remote 功能的Ports视图详见下文远程开发小节端口以表格而非列表/树的形式展示。Getting Started 编辑器实验VS Code 开始试验启动时展示的Getting Started 编辑器帮助新用户更快上手。可通过workbench.startupEditor设置自由开启或关闭将其设为gettingStarted即可启用新行为。仓库文档中还有更现代的用法——例如 docs/agents/reference/ai-settings.md 提到可设为agentSessionsWelcomePage让欢迎页承载 Agent 会话入口。Timeline 视图跨历史条目对比你现在可以对比 Git 历史时间线中的任意两条记录使用Select for Compare与Compare with Selected命令——与资源管理器中比较文件的方式类似。该功能让你快速查看文件历史中任意两次提交之间的全部变更。Sash 悬停边框颜色默认开启1.52 版本引入的 sash 悬停边框颜色令牌sash.hoverBorder当时未设默认值1.54 起在所有主题上默认显示该颜色。调试功能改进断点视图改进移除断点的内联操作Breakpoints 视图中选中断点旁新增X内联按钮移除断点更便捷。异常过滤器帮助文本VS Code 现在会在异常过滤器上显示悬停提示并在条件输入框中显示占位文本。这两类信息均由底层调试扩展提供因此可以比通用提示更具体、更有用。该特性依赖 Debug Adapter ProtocolDAP的扩展见下文需要调试扩展显式启用本版本中仅内置的 JavaScript 调试器支持。新设置与其他改进折叠调试控制台中的相同行新设置debug.console.collapseIdenticalLines控制 Debug Console 是否折叠完全相同的行并以徽章显示出现次数默认折叠。控制调试前保存哪些编辑器新设置debug.saveBeforeStart控制调试启动前保存哪些编辑器取值行为allEditorsInActiveGroup保存活动组中的所有编辑器默认值nonUntitledEditorsInActiveGroup保存活动组中除未命名untitled外的所有编辑器none不保存任何编辑器该设置对 PowerShell 调试尤其有用因为 PowerShell 调试器支持调试未保存的文件。Restart Frame 动作启用状态改进DAP 新增能力后调试扩展可以向 VS Code UI 传达所选栈帧是否支持 “Restart Frame” 操作。VS Code 现在会在Call Stack 视图中禁用无法重启的栈帧的 restart frame 内联动作。例如 JS-Debug 扩展已采用该特性异步栈追踪会禁用 restart frame 动作。语言支持更新TypeScript 4.2VS Code 随附 TypeScript 4.2.2包含大量 TypeScript 语言改进以及 JavaScript/TypeScript 工具链的改进与 bug 修复。Quick Fix声明缺失函数新的Add missing function declarationQuick Fix 会为缺失的函数生成桩实现。例如对如下调用const x: number add(1, 2);对add使用该 Quick Fix 后得到const x: number add(1, 2); function add(arg0: number, arg1: number): number { throw new Error(Function not implemented.); }在 JavaScript 中使用该 Quick Fix 需要先启用类型检查checkJs或 jsconfig 中的相关配置详见 docs/languages/javascript.md。JSDoc 模板自动生成 returnsJSDoc 模板现在会在被注释函数包含return语句时自动加入returnsfunction getViz(el){ return el?.viz; }生成模板/** * * param {*} el * returns */ function getViz(el){ return el?.viz; }可通过javascript.suggest.jsdoc.generateReturns与typescript.suggest.jsdoc.generateReturns关闭returns的生成。弃用 DOM API 标记被弃用的 DOM 方法会在补全建议与代码中被标记为 deprecated。可用设置editor.showDeprecated: false关闭编辑器中弃用属性/函数的展示。Notebook 改进自动重载 Notebook当 Notebook 文件在磁盘上发生变化且没有未保存的更改时Notebook 现在会自动重载这使得配合版本控制使用 Notebook 更加顺畅。大单元格焦点指示改进当大型 Notebook 单元格获得焦点、且单元格顶部/底部超出视野时现在会在聚焦单元格的左右两侧显示边框便于确认当前焦点位置。CSS/LESS/SCSS 与 HTML 悬停内容定制现在可以微调 HTML 与 CSS 悬停内容不显示来自 MDN 的文档不显示指向 MDN 页面的链接。对应设置css.hover.documentation与css.hover.references把css替换为html、scss或less即可作用于对应语言。预览功能可扩展的 Notebook Markdown 渲染器本迭代探索了让 Notebook 单元格的 Markdown 渲染器可扩展。官方采用 Markdown It 渲染所有 Notebook Markdown并把渲染后的 Markdown 移入 Notebook 的 backlayer webview从而支持在单元格中渲染数学公式等扩展内容。虽然正式 API 尚未开放但可通过未文档化设置notebook.experimental.useMarkdownRenderer: true提前体验。扩展生态贡献Brackets 键位与扩展包来自 Brackets 编辑器的开发者可以通过Brackets Keymap扩展继续使用熟悉的快捷键Brackets Extension Pack则捆绑了 CSS 处理与实时预览相关的扩展。GitHub Pull Requests and IssuesGitHub Pull Requests and Issues 扩展继续迭代0.24.0 版本支持在 VS Code 内处理、创建与管理 PR 和 issue。Remote Development远程开发扩展在本版本的亮点完整说明见 远程开发版本说明Ports 视图表格布局端口转发列表以表格展示与本文前述 table widget 对应Ports 视图移入Panel以获得更充裕的表格空间远程扩展宿主进程显示更友好的名称。端口转发来源可选新设置remote.autoForwardPortsSource决定自动转发端口的来源。默认按远程系统运行中的进程查找端口若不需要可设为output改为依据终端与调试输出查找端口。注意来自output来源的自动转发端口在进程停止后不会被关闭SSH 连接的默认值即output以避免转发不需要的端口。Remote - SSHX11 转发若 SSH 配置中已设置ForwardX11 yes且服务器启用 X11 转发则从终端、任务和调试器启动的程序都能享受 X11 窗口转发。WSLWSL 2 支持改进对 Windows 文件系统挂载/mnt/...使用轮询remote.WSL.fileWatcher.polling默认开启以规避 WSL 2 的文件事件已知问题打开 Windows 文件系统上的文件夹时提示推荐使用 Linux 文件系统代理场景下可强制remote.WSL.server.connectThroughLocalhost连接。Dev Containers0.163.xremote.portsAttributes成为devcontainer.json的顶层属性改动后需重建容器生效postCreateCommand/postStartCommand/postAttachCommand改为在后台运行输出自动显示在可接受键盘输入含CtrlC取消的终端中修复了 Docker 可执行文件路径配置相关的安全漏洞CVE-2021-27083。扩展作者指南编辑器标题菜单与 run 子菜单的限制编辑器工具栏editor/title空间有限因此实现了溢出行为当主组以图标渲染的动作组超过九个命令时其余命令溢出到...菜单新增editor/title/run子菜单官方请求扩展作者把运行/调试类命令贡献到该子菜单而不再放入editor/title菜单同时不再需要使用魔法组值1_run10和1_run20来让命令出现在正确位置run 子菜单是动态的当它只有唯一子项时会用该子项直接替换自身。Authentication Provider API扩展现在可以注册认证提供方authentication provider供其他扩展针对某个服务执行认证。对应贡献点为contributes.authentication示例见 api/references/contribution-points.md注册后会自动建立激活事件并在扩展特性中展示。新的扩展市场反馈渠道扩展市场相关的技术问题、反馈与功能请求现在有独立的公开仓库用于提交 issue。更新后的 codiconscodicon 图标库新增了以下图标debug-rerun、gather、git-pull-request-create、notebook-template、run-above、run-below、type-hierarchy、type-hierarchy-sub、type-hierarchy-super、variable-group并统一更新了以下图标样式debug-alt-small、debug-alt、debug-rerun、play-circle、play、run-above、run-all、run-below。图标在标签$(iconId)与 APIThemeIcon中的使用方式见 api/references/icons-in-labels.md。提议扩展 APIProposed API每个里程碑都会发布新的提议 API。试用提议 API 需满足三个条件使用Insiders版本提议 API 变更频繁在扩展package.json中加入enableProposedApi: true将最新版vscode.proposed.d.ts复制到项目源码位置。使用提议 API 的扩展无法发布因为下个版本可能引入破坏性变更。Icon 贡献点icons贡献点允许扩展按 ID 定义新图标并附带默认图标。该图标 ID 随后可用于扩展自身或依赖它的其他扩展的所有 ThemeIcon 可用的位置例如 Markdown 字符串$(distro-ubuntu) Ubuntu 20.04或new ThemeIcon(distro-ubuntu)。产品图标主题如果知道该图标 ID也可以重新定义它。Inline Values Provider APIVS Code 调试器的Show Inline Values内联值展示此前基于核心中的通用实现无法通过设置定制、也无法通过扩展扩展对某些语言不够贴合、甚至可能显示错误的值。新的提议 API 允许完全替换内置实现或替换部分实现必须为某个语言注册InlineValuesProvider对给定文档provider 需要定位所有应展示内联值的语言元素对每个元素返回一个InlineValue描述对象。当前支持三种类型InlineValueText要显示的完整文本InlineValueVariableLookup变量名VS Code 会在VARIABLES 视图中查找其值以 “name value” 形式展示InlineValueEvaluatableExpressionVS Code 会发送给调试器求值的表达式以 “expression result” 形式展示。以下是一个为 markdown 文件注册内联值 provider 的最小示例用正则定位形如local_i/local_f的“变量”再交给 VARIABLES 视图取值vscode.languages.registerInlineValuesProvider(markdown, { provideInlineValues(document: TextDocument, viewport: Range, context: InlineValueContext) : ProviderResultInlineValue[] { const allValues: InlineValue[] []; for (let l 0; l context.stoppedLocation.end.line; l) { const line document.lineAt(l); var regExp /local_[ifso]/ig; // match variables of the form local_i, local_f, Local_i, LOCAL_S... do { var match regExp.exec(line.text); if (match) { const varName match[0]; const varRange new Range(l, match.index, l, match.index varName.length); allValues.push(new InlineValueVariableLookup(varRange, varName)); } } while (match); } return allValues; } });与此对应的调试命令为vscode.executeInlineValueProvider可传入 document URI、range 与 InlineValueContext返回 InlineValue 数组详见 api/references/commands.md。Testing测试体验持续推进测试功能的开发持续推进本月聚焦打磨 VS Code 内的基础体验与扩展 API并发布了临时性文档api/extension-guides/testing.md后续将随 API 稳定而逐步完善。协议进展LSP 与 DAPLanguage Server Protocol诊断拉取模型diagnostic pull model面向即将到来的 LSP 3.17 版本首个诊断拉取模型提案得以实现该提案已可用于新版 VS Code LSP 库。Debug Adapter ProtocolExceptionBreakpointsFilter 新增帮助文本属性ExceptionBreakpointsFilter新增两个可选 UI 属性description与conditionDescription。description可在悬停中展示conditionDescription可作为条件编辑输入框的占位文本——正是前文断点视图改进的协议基础。setExceptionBreakpoints 请求描述改进补充了适配器在用户输入无效异常断点条件时应如何处理的指引。栈帧新增 canRestart 属性栈帧新增可选布尔属性canRestart表示该栈帧是否可执行restart请求客户端可据此启用/禁用Restart Frame上下文菜单动作。工程与基础设施Electron sandbox 进展本迭代继续为启用 Electron 的 sandbox 与 context isolation 特性做准备把渲染器中的部分原生模块依赖迁移到其他进程MessagePort通信通道已实现在 sandbox 启用时正常工作。新终端进程布局pty host终端进程改为在独立的 “pty host” 进程下派生而非窗口进程。这既是 Electron sandbox 的一部分也提升了终端的稳定性与性能与前文 Windows 终端性能改进直接相关。Windows 安装包发布到 Windows Package Managerx86与x64的 Windows 用户版与系统版安装包现在发布到 Windows Package Manager。可用winget搜索所有 VS Code 安装包winget search vscode随后可用winget install安装任一已发布的安装包。使用 TypeScript 4.3 构建 VS CodeVS Code 现在使用 TypeScript 4.3 的 nightly 构建进行自举构建用于验证 TypeScript 团队的最新成果并反馈问题该版本已帮助发现若干条件语句中缺失await的案例。锁定 yarn.lock 变更与默认分支改名为提升供应链安全CI 现在阻止针对yarn.lock文件的 PR同时所有仓库的默认分支开始从master改名为main当时约完成 60%。文档与社区本版本配套发布了“VS Code 与课堂 Python”案例研究Harvey Mudd 学院教授在入门 CS 课程中的实践、推荐设置、扩展与免费课程以及extension bisect的排障博客文章——当编辑器行为“异常”时可用扩展二分法extension bisect快速定位问题扩展该工具源自 1.52 版本。重要修复一览1.54 修复了多个社区反馈的问题例如菜单键应用到资源管理器中错误项#100151、每次 Python 会话打开新集成终端#112055、复制文件夹/文件时保留符号链接#114881、“任务无法被跟踪”的挫败感#114933、文件资源管理器中过滤时光标键失效#115922、Debug Console 输出无链接悬停#116037等。完整列表见 release-notes/v1_54.md 的 Notable fixes 小节。结语VS Code 1.54 是一个在“平台化”与“生态化”两个方向同时发力的版本Apple Silicon 原生支持与 pty host 进程布局奠定了后续性能与安全演进的基座终端持久会话、Notebook 自动重载与 Timeline 对比改善了日常开发流而对扩展作者而言editor/title/run子菜单、Authentication Provider API、Icon 贡献点与 Inline Values Provider 提议 API 共同勾勒了编辑器工具栏、认证、图标与调试内联值四条可扩展路径。若要深入某一主题可继续阅读仓库内的 终端进阶文档、产品图标主题指南、贡献点参考 与 远程开发版本说明。赞分享文档教程【免费下载链接】vscode-docsPublic documentation for Visual Studio Code项目地址https://gitcode.com/gh_mirrors/vs/vscode-docs点击查看免费下载相关推荐Visual Studio Code 2016 年 2 月版本发布解析Salsa 语言服务、代码折叠与扩展生态演进Visual Studio Code 2016 年 2 月版本发布解析Salsa 语言服务、代码折叠与扩展生态演进 2016 年 3 月 7 日Visual文档教程OPA 月度通讯解读2021 年 11 月版——社区生态、版本演进与贡献者文化OPA 月度通讯解读2021 年 11 月版——社区生态、版本演进与贡献者文化 导读 本文以 Open Policy AgentOPA官方发布的首期月度通后端认证鉴权云原生Visual Studio Code 1.4 版本深度解读2016 年 7 月编辑器、调试与扩展 API 新特性全解析Visual Studio Code 1.4 版本深度解读2016 年 7 月编辑器、调试与扩展 API 新特性全解析 导读 本文基于 vscode docs文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考