<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>VS Code on KnightLi的博客</title>
        <link>https://knightli.com/tags/vs-code/</link>
        <description>Recent content in VS Code on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 08 May 2026 13:28:14 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/vs-code/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>VS Code 切换界面语言的方法：中文、英文和其他语言</title>
        <link>https://knightli.com/2026/05/08/vscode-switch-display-language/</link>
        <pubDate>Fri, 08 May 2026 13:28:14 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/08/vscode-switch-display-language/</guid>
        <description>&lt;p&gt;VS Code 支持多种界面语言。常见做法是先安装对应语言包，再通过命令面板选择显示语言；如果需要固定某种语言，也可以手动修改 &lt;code&gt;argv.json&lt;/code&gt; 中的 &lt;code&gt;locale&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这套方法不仅适用于简体中文，也适用于英文、繁体中文、日文、韩文、法文、德文、西班牙文等语言。&lt;/p&gt;
&lt;h2 id=&#34;安装对应语言包&#34;&gt;安装对应语言包
&lt;/h2&gt;&lt;p&gt;如果要切换到非英文界面，通常需要先安装语言包。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 VS Code 左侧扩展面板，也可以使用快捷键 &lt;code&gt;Ctrl+Shift+X&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;在搜索框中输入目标语言，例如 &lt;code&gt;Chinese&lt;/code&gt;、&lt;code&gt;Japanese&lt;/code&gt;、&lt;code&gt;Korean&lt;/code&gt;、&lt;code&gt;French&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;选择对应语言包，点击 &lt;code&gt;Install&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;安装完成后，按提示重启 VS Code。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;简体中文常用语言包是 &lt;code&gt;Chinese (Simplified)&lt;/code&gt;，繁体中文常用语言包是 &lt;code&gt;Chinese (Traditional)&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;通过命令面板切换语言&#34;&gt;通过命令面板切换语言
&lt;/h2&gt;&lt;p&gt;这是最推荐的切换方式，适合大多数用户。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开命令面板：&lt;code&gt;Ctrl+Shift+P&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;输入 &lt;code&gt;Configure Display Language&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;选择 &lt;code&gt;Configure Display Language&lt;/code&gt; 命令。&lt;/li&gt;
&lt;li&gt;在列表中选择要使用的语言。&lt;/li&gt;
&lt;li&gt;按提示重启 VS Code。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;重启后，菜单、设置页和常见提示会切换到所选语言。如果列表里没有目标语言，先到扩展面板安装对应语言包。&lt;/p&gt;
&lt;h2 id=&#34;通过-argvjson-手动指定语言&#34;&gt;通过 argv.json 手动指定语言
&lt;/h2&gt;&lt;p&gt;如果命令面板切换失败，或者想明确固定显示语言，可以直接修改 VS Code 的运行时参数文件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开命令面板：&lt;code&gt;Ctrl+Shift+P&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;输入并选择 &lt;code&gt;Preferences: Configure Runtime Arguments&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;找到或添加 &lt;code&gt;locale&lt;/code&gt; 配置项。&lt;/li&gt;
&lt;li&gt;把值改成目标语言代码。&lt;/li&gt;
&lt;li&gt;保存后重启 VS Code。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如切换为英文：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;en&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;切换为简体中文：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;切换为日文：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;argv.json&lt;/code&gt; 是 JSON 文件，修改时要注意逗号和引号。配置写错时，VS Code 可能无法正确读取语言设置。&lt;/p&gt;
&lt;h2 id=&#34;常用界面语言代码&#34;&gt;常用界面语言代码
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;显示语言&lt;/th&gt;
          &lt;th&gt;locale&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;English (US)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;en&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;简体中文&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zh-cn&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;繁体中文&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zh-tw&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;French&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;fr&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;German&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;de&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Italian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;it&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Spanish&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;es&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Japanese&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ja&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Korean&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ko&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Russian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ru&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Portuguese (Brazil)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pt-br&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Turkish&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;tr&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Bulgarian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hungarian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;hu&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;语言没有生效怎么办&#34;&gt;语言没有生效怎么办
&lt;/h2&gt;&lt;p&gt;可以按下面顺序排查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认目标语言包已经安装。&lt;/li&gt;
&lt;li&gt;确认 &lt;code&gt;locale&lt;/code&gt; 写的是正确语言代码，例如简体中文是 &lt;code&gt;zh-cn&lt;/code&gt;，不是 &lt;code&gt;zh-CN&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;修改语言后完整关闭并重新打开 VS Code。&lt;/li&gt;
&lt;li&gt;如果手动改过 &lt;code&gt;argv.json&lt;/code&gt;，检查 JSON 语法是否正确。&lt;/li&gt;
&lt;li&gt;如果配置混乱，可以删除 &lt;code&gt;locale&lt;/code&gt; 项，再通过 &lt;code&gt;Configure Display Language&lt;/code&gt; 重新选择。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一般来说，通过 &lt;code&gt;Configure Display Language&lt;/code&gt; 切换最省事；只有在需要强制指定语言或命令面板切换不生效时，才建议手动修改 &lt;code&gt;argv.json&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/mighty13/article/details/114420578&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VScode：将VScode界面的显示语言改为简体中文，切换VScode界面的显示语言&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>2026 年嵌入式开发环境怎么选：Keil、STM32CubeIDE、VS Code 与 AI 协作</title>
        <link>https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/</link>
        <pubDate>Wed, 22 Apr 2026 23:05:00 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/</guid>
        <description>&lt;p&gt;只要你还在做单片机或者嵌入式开发，很快就会遇到一个很现实的问题：到了 2026 年，在 AI 写代码已经越来越普遍的情况下，开发环境到底应该怎么选？&lt;/p&gt;
&lt;p&gt;这个问题表面上像是在比较几个 IDE，实际讨论的却是另一件事：你到底是要一个“能把工程跑起来的工具”，还是一套“兼顾生态、编码体验和 AI 协作能力”的工作流。&lt;/p&gt;
&lt;p&gt;如果按这个角度去看，答案往往就不是简单地在 &lt;code&gt;Keil&lt;/code&gt;、&lt;code&gt;STM32CubeIDE&lt;/code&gt;、&lt;code&gt;VS Code&lt;/code&gt;、&lt;code&gt;CLion&lt;/code&gt; 里选一个，而是重新组合它们各自最擅长的部分。&lt;/p&gt;
&lt;h2 id=&#34;先看几个主流选项各自解决什么问题&#34;&gt;先看几个主流选项，各自解决什么问题
&lt;/h2&gt;&lt;p&gt;嵌入式领域这些年常见的环境，基本还是那几类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Keil&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STM32CubeIDE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VS Code&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLion&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果再往前追，当然还会有人提 &lt;code&gt;IAR&lt;/code&gt;。只是从今天的讨论出发，更值得看的已经不是“谁资格最老”，而是谁更适合当前这套开发现实。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/embedded-ide-comparison.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;嵌入式开发环境横向对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;keil生态强上手稳但编辑体验已经明显落后&#34;&gt;Keil：生态强、上手稳，但编辑体验已经明显落后
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Keil&lt;/code&gt; 到今天仍然很难绕开，原因不复杂：它用得实在太广了。&lt;/p&gt;
&lt;p&gt;无论是公司里留下来的老工程，还是网上大量教程、资料、示例工程，很多都还是围绕 &lt;code&gt;Keil&lt;/code&gt; 组织的。它在编译、下载、调试这一整套流程上依然成熟，尤其是你真的要把板子跑起来时，它的路径非常短。&lt;/p&gt;
&lt;p&gt;它的问题也同样明显：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;界面老&lt;/li&gt;
&lt;li&gt;编辑体验一般&lt;/li&gt;
&lt;li&gt;不擅长承担 AI 辅助编码的主场&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 &lt;code&gt;Keil&lt;/code&gt; 更像是一个“工程入口和调试底座”，而不是一个面向 2026 年编码体验的理想编辑环境。&lt;/p&gt;
&lt;h2 id=&#34;stm32cubeide对-stm32-友好但更多是学习和快速起步工具&#34;&gt;STM32CubeIDE：对 STM32 友好，但更多是学习和快速起步工具
&lt;/h2&gt;&lt;p&gt;如果你主要在 &lt;code&gt;STM32&lt;/code&gt; 生态里活动，&lt;code&gt;STM32CubeIDE&lt;/code&gt; 很容易成为第一个接触到的环境。&lt;/p&gt;
&lt;p&gt;它的优点很明确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上手友好&lt;/li&gt;
&lt;li&gt;外设配置和工程生成方便&lt;/li&gt;
&lt;li&gt;调试链路相对完整&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对学生、新手和刚起步的项目来说，这套体验确实足够直接。&lt;/p&gt;
&lt;p&gt;但一旦进入更长期、更多协作、更多定制的工程环境，它的局限也会慢慢暴露出来。尤其是在商业项目或者更复杂的团队工作流里，它未必是那个最舒服的主环境。&lt;/p&gt;
&lt;p&gt;所以它更适合“快速启动”和“STM32 生态内的一体化体验”，不一定适合作为长期主力编辑器。&lt;/p&gt;
&lt;h2 id=&#34;vs-code严格说不是-ide但在-ai-时代优势越来越明显&#34;&gt;VS Code：严格说不是 IDE，但在 AI 时代优势越来越明显
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;VS Code&lt;/code&gt; 严格来说并不是传统意义上的 IDE，更准确地说，它是一个可扩展的代码编辑器。&lt;/p&gt;
&lt;p&gt;这也意味着它天然有两面性。&lt;/p&gt;
&lt;p&gt;它的弱点是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要插件和配置&lt;/li&gt;
&lt;li&gt;对新手不够友好&lt;/li&gt;
&lt;li&gt;不能开箱即用地替代嵌入式 IDE 全流程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它真正强的地方，恰恰也在这里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可扩展性强&lt;/li&gt;
&lt;li&gt;编码体验明显更现代&lt;/li&gt;
&lt;li&gt;语法高亮、跳转、搜索、重构体验更好&lt;/li&gt;
&lt;li&gt;对 AI 工具和 Agent 工作流支持更积极&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在今天这个阶段，很多人真正需要的已经不只是“能写代码”，而是“写代码时能不能顺手把 AI 协作接进来”。从这个角度看，&lt;code&gt;VS Code&lt;/code&gt; 的优势几乎是肉眼可见的。&lt;/p&gt;
&lt;h2 id=&#34;clion体验不错但在嵌入式场景里不够主流&#34;&gt;CLion：体验不错，但在嵌入式场景里不够主流
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CLion&lt;/code&gt; 经常会被提到，因为它的 C/C++ 编码体验一直不差。&lt;/p&gt;
&lt;p&gt;但对很多嵌入式开发者来说，它的问题不一定出在“好不好用”，而是“值不值得切过去”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用的人相对少&lt;/li&gt;
&lt;li&gt;与现有嵌入式工程生态连接不如 &lt;code&gt;Keil&lt;/code&gt; 直接&lt;/li&gt;
&lt;li&gt;在 AI 协作这件事上，也未必比 &lt;code&gt;VS Code&lt;/code&gt; 更有现实优势&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以它更像是一个“理论上也能做得不错”的选项，但在今天的嵌入式主流工作流里，并不是最自然的那个核心。&lt;/p&gt;
&lt;h2 id=&#34;更现实的答案keil-负责编译调试vs-code-负责写代码&#34;&gt;更现实的答案：Keil 负责编译调试，VS Code 负责写代码
&lt;/h2&gt;&lt;p&gt;如果把上面这些工具拆开看，很容易得到一个更务实的结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 &lt;code&gt;Keil&lt;/code&gt; 保留现有工程生态、编译、下载和调试能力&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;VS Code&lt;/code&gt; 承担日常编码、搜索、跳转和 AI 协作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套组合的价值在于，它不是试图用一个工具包打天下，而是让每个工具回到自己最擅长的位置。&lt;/p&gt;
&lt;p&gt;对很多嵌入式工程来说，&lt;code&gt;Keil&lt;/code&gt; 的生态根本绕不开。既然如此，与其强行把所有工作都塞回 &lt;code&gt;Keil&lt;/code&gt;，不如承认它更适合作为后端编译调试入口；而真正的编辑体验，则交给 &lt;code&gt;VS Code&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/22/embedded-development-environment-keil-vscode-ai-2026/keil-vscode-ai-workflow.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Keil 与 VS Code 组合工作流示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;为什么这套组合在-ai-时代更有优势&#34;&gt;为什么这套组合在 AI 时代更有优势
&lt;/h2&gt;&lt;p&gt;到了今天，开发环境的分界线已经不只是“编辑器顺不顺手”，而是“它能不能自然接入 AI”。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;VS Code&lt;/code&gt; 在这件事上有几个很现实的优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI 插件和 Agent 支持更活跃&lt;/li&gt;
&lt;li&gt;代码浏览体验更适合让 AI 读工程、改工程&lt;/li&gt;
&lt;li&gt;更容易和现代插件生态结合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着你可以把嵌入式开发里最痛苦的一部分工作，开始交给 AI 帮你分担：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在现有工程里找函数和调用链&lt;/li&gt;
&lt;li&gt;快速生成一段初始化代码&lt;/li&gt;
&lt;li&gt;帮你补一个串口打印&lt;/li&gt;
&lt;li&gt;解释旧工程结构&lt;/li&gt;
&lt;li&gt;在已有文件里做小范围修改&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些事情过去不是不能做，而是做起来不顺。&lt;code&gt;VS Code&lt;/code&gt; 的意义不只是“更好看”，而是它更容易成为 AI 协作的工作台。&lt;/p&gt;
&lt;h2 id=&#34;关键补丁用插件把-vs-code-和-keil-工程接起来&#34;&gt;关键补丁：用插件把 VS Code 和 Keil 工程接起来
&lt;/h2&gt;&lt;p&gt;这套工作流能不能成立，核心不在口号，而在你能不能把 &lt;code&gt;VS Code&lt;/code&gt; 和 &lt;code&gt;Keil&lt;/code&gt; 工程接起来。&lt;/p&gt;
&lt;p&gt;比较实用的一类插件思路，是让 &lt;code&gt;VS Code&lt;/code&gt; 直接读取 &lt;code&gt;Keil&lt;/code&gt; 工程结构，并在编辑器内部调用 &lt;code&gt;Keil&lt;/code&gt; 后台程序完成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;打开工程&lt;/li&gt;
&lt;li&gt;编译&lt;/li&gt;
&lt;li&gt;下载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样一来，你日常写代码不用频繁在两个界面之间来回切，只有到了更重的调试环节，再回到 &lt;code&gt;Keil&lt;/code&gt; 里做单步、断点和寄存器观察。&lt;/p&gt;
&lt;p&gt;这类插件真正有价值的地方，不只是“少切几个窗口”，而是它让工作流连续起来了。&lt;/p&gt;
&lt;h2 id=&#34;不要忽视-cc-基础插件配置&#34;&gt;不要忽视 C/C++ 基础插件配置
&lt;/h2&gt;&lt;p&gt;如果你打算把 &lt;code&gt;VS Code&lt;/code&gt; 当作嵌入式主编辑器，一个非常基础但常被忽略的点是：一定要把 C/C++ 基础插件和工程索引配置好。&lt;/p&gt;
&lt;p&gt;否则你会遇到一系列很影响体验的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;跳转不到定义&lt;/li&gt;
&lt;li&gt;红线误报&lt;/li&gt;
&lt;li&gt;补全不准&lt;/li&gt;
&lt;li&gt;头文件关系混乱&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很多人会误以为是 &lt;code&gt;VS Code&lt;/code&gt; 不适合嵌入式，实际上往往只是工程索引和插件配置没接好。&lt;/p&gt;
&lt;p&gt;一旦这部分配置完整，&lt;code&gt;VS Code&lt;/code&gt; 才能真正发挥出它在阅读大型工程、搜索符号、配合 AI 辅助修改代码上的优势。&lt;/p&gt;
&lt;h2 id=&#34;这套工作流最适合谁&#34;&gt;这套工作流最适合谁
&lt;/h2&gt;&lt;p&gt;我觉得下面这几类人，会特别适合这种组合式环境：&lt;/p&gt;
&lt;h3 id=&#34;1-已经有大量-keil-工程的人&#34;&gt;1. 已经有大量 Keil 工程的人
&lt;/h3&gt;&lt;p&gt;如果你公司项目、课程资料或者历史代码都围绕 &lt;code&gt;Keil&lt;/code&gt; 展开，那就没必要为了“现代化”硬切掉原有生态。保留 &lt;code&gt;Keil&lt;/code&gt;，再补一个 &lt;code&gt;VS Code&lt;/code&gt; 前端，是迁移成本最低的做法。&lt;/p&gt;
&lt;h3 id=&#34;2-想用-ai-辅助写嵌入式代码的人&#34;&gt;2. 想用 AI 辅助写嵌入式代码的人
&lt;/h3&gt;&lt;p&gt;如果你已经习惯让 AI 帮你解释函数、补样板代码、改局部逻辑，那么 &lt;code&gt;VS Code&lt;/code&gt; 会比传统嵌入式 IDE 更自然地承接这件事。&lt;/p&gt;
&lt;h3 id=&#34;3-想同时兼顾学习资料和真实项目的人&#34;&gt;3. 想同时兼顾学习资料和真实项目的人
&lt;/h3&gt;&lt;p&gt;很多学习资料仍然建立在 &lt;code&gt;Keil&lt;/code&gt; 上，但你自己的工作流未必要停留在那个年代。把 &lt;code&gt;Keil&lt;/code&gt; 作为工程兼容层，把 &lt;code&gt;VS Code&lt;/code&gt; 作为生产力层，会更平衡。&lt;/p&gt;
&lt;h2 id=&#34;结语&#34;&gt;结语
&lt;/h2&gt;&lt;p&gt;到了 2026 年，嵌入式开发环境的关键问题，已经不再只是“哪个 IDE 功能更多”，而是“哪种组合最符合今天的工作方式”。&lt;/p&gt;
&lt;p&gt;如果你只想快速起步，&lt;code&gt;STM32CubeIDE&lt;/code&gt; 依然有它的位置；如果你要稳定接住大量既有工程，&lt;code&gt;Keil&lt;/code&gt; 依然绕不开；但如果你还想把现代编辑体验和 AI 协作一起接进来，那么更现实的答案，往往是：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Keil&lt;/code&gt; 负责编译和调试，&lt;code&gt;VS Code&lt;/code&gt; 负责写代码。&lt;/p&gt;
&lt;p&gt;这不一定是唯一答案，但很可能是当下最不拧巴的一种答案。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>在 VS Code 里接入 Claude：从 API 配置到网页生成</title>
        <link>https://knightli.com/2026/04/16/vscode-claude-api-coding-workflow/</link>
        <pubDate>Thu, 16 Apr 2026 17:47:17 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/16/vscode-claude-api-coding-workflow/</guid>
        <description>&lt;p&gt;如果你已经开始把大模型带进日常开发，最直接的感受通常不是“会不会写代码”，而是“能不能把很多零碎工作一次性推进起来”。&lt;/p&gt;
&lt;p&gt;这类工具真正有价值的地方，不只是补全几行代码，而是能在编辑器里同时完成对话、改文件、预览结果和继续迭代。对于简单页面、原型验证、样式调整和功能补齐，这种工作方式往往比传统的手动来回切换更顺手。&lt;/p&gt;
&lt;p&gt;这篇就整理一下，一个比较实用的思路：在 &lt;code&gt;VS Code&lt;/code&gt; 里接入 &lt;code&gt;Claude&lt;/code&gt; 一类模型之后，怎么把它用在真实的页面生成和小功能迭代上。&lt;/p&gt;
&lt;h2 id=&#34;一先把工具链接通&#34;&gt;一、先把工具链接通
&lt;/h2&gt;&lt;p&gt;这类 AI 编程插件的核心流程其实都差不多：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;VS Code&lt;/code&gt; 里安装支持对话式改代码的插件&lt;/li&gt;
&lt;li&gt;在插件设置里填入模型服务的 &lt;code&gt;Base URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;配置自己的 &lt;code&gt;API Key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;选择要使用的模型名称&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完成这几步之后，编辑器里的 AI 能力才算真正可用。后面的体验差异，大多不在“能不能用”，而在“模型质量怎么样、插件交互是否顺手、生成结果是否稳定”。&lt;/p&gt;
&lt;p&gt;如果你之前没有配过这类插件，可以把它理解成这样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;插件负责把你的自然语言请求变成编辑器里的操作流程&lt;/li&gt;
&lt;li&gt;&lt;code&gt;API&lt;/code&gt; 负责把请求发送给模型服务&lt;/li&gt;
&lt;li&gt;模型负责理解你的需求并返回代码、修改建议或结构化结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以真正要配对的，其实就是三件事：插件、接口地址、模型名。&lt;/p&gt;
&lt;h2 id=&#34;二适合先从小任务开始&#34;&gt;二、适合先从小任务开始
&lt;/h2&gt;&lt;p&gt;很多人第一次上手，会希望它直接帮自己“做一个完整项目”。这不是不行，但对新手来说，最容易建立正确预期的方式，反而是先从非常小的任务开始。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生成一个简单的前端页面&lt;/li&gt;
&lt;li&gt;给现有页面补一个公告区域&lt;/li&gt;
&lt;li&gt;增加注册表单&lt;/li&gt;
&lt;li&gt;调整界面，让样式更正式一些&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种任务有几个好处：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指令足够清楚，模型更容易理解&lt;/li&gt;
&lt;li&gt;结果可以立刻预览，反馈很快&lt;/li&gt;
&lt;li&gt;你能明显看到“对话”和“改代码”是如何联动的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当需求比较明确时，插件通常会一边在侧边栏里和你对话，一边直接修改右侧文件。等到任务完成之后，你再看生成结果、预览页面、决定要不要继续追加需求，这个节奏会比纯聊天自然很多。&lt;/p&gt;
&lt;h2 id=&#34;三真正提效的不是一次生成而是连续迭代&#34;&gt;三、真正提效的不是一次生成，而是连续迭代
&lt;/h2&gt;&lt;p&gt;AI 编程最容易被误解的一点，是大家总把注意力放在“第一次生成得像不像”。&lt;/p&gt;
&lt;p&gt;但在实际使用里，更重要的往往是第二轮、第三轮还能不能顺着改下去。&lt;/p&gt;
&lt;p&gt;一个比较常见的过程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先让它快速生成一个能跑的页面骨架&lt;/li&gt;
&lt;li&gt;再追加一两个明确功能&lt;/li&gt;
&lt;li&gt;然后观察代码和界面是否一起变得更完整&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果工具体验比较顺，整个过程会很像你在带一个执行速度很快的初级开发同事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你提需求&lt;/li&gt;
&lt;li&gt;它先做出一版&lt;/li&gt;
&lt;li&gt;你指出哪里不够&lt;/li&gt;
&lt;li&gt;它继续修改&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种“连续对话式迭代”比单次生成更接近日常开发场景，也是它最容易拉开效率差距的地方。&lt;/p&gt;
&lt;h2 id=&#34;四要学会区分适合交给-ai-的部分和自己顺手改更快的部分&#34;&gt;四、要学会区分“适合交给 AI 的部分”和“自己顺手改更快的部分”
&lt;/h2&gt;&lt;p&gt;这也是非常关键的一点。&lt;/p&gt;
&lt;p&gt;像页面布局、组件初稿、表单骨架、样式润色、文案占位、重复性代码补齐，这些通常都很适合交给 AI 先做。&lt;/p&gt;
&lt;p&gt;但如果只是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;改一行按钮文字&lt;/li&gt;
&lt;li&gt;调整一个页脚说明&lt;/li&gt;
&lt;li&gt;换一个很小的样式细节&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很多时候自己直接改会更快。因为这种修改的成本已经低到，不值得再发起一次完整的模型交互。&lt;/p&gt;
&lt;p&gt;真正高效的使用方式，不是“什么都交给 AI”，而是知道什么时候该让它一口气做完大块工作，什么时候自己收尾更省时间。&lt;/p&gt;
&lt;h2 id=&#34;五api-配置是门槛但不是难点&#34;&gt;五、API 配置是门槛，但不是难点
&lt;/h2&gt;&lt;p&gt;不少人卡住，其实不是卡在写代码，而是卡在插件配置。&lt;/p&gt;
&lt;p&gt;常见需要确认的内容通常包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;接口地址是不是填对了&lt;/li&gt;
&lt;li&gt;密钥是不是有效&lt;/li&gt;
&lt;li&gt;模型名称是不是和服务端一致&lt;/li&gt;
&lt;li&gt;插件是否要求特定格式的 &lt;code&gt;Base URL&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只要这几项有一项不对，插件表面上可能还能打开，但真正发请求时就会失败。&lt;/p&gt;
&lt;p&gt;所以如果你发现插件没有正常工作，排查顺序通常可以很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先看接口地址&lt;/li&gt;
&lt;li&gt;再看密钥&lt;/li&gt;
&lt;li&gt;最后看模型名和插件要求的格式&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;把这三项核对清楚，大多数接入问题都能快速定位。&lt;/p&gt;
&lt;h2 id=&#34;六怎么看生成结果值不值得继续用&#34;&gt;六、怎么看生成结果值不值得继续用
&lt;/h2&gt;&lt;p&gt;一个比较实用的判断标准，不是看它“惊不惊艳”，而是看下面这几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生成出来的页面能不能直接跑起来&lt;/li&gt;
&lt;li&gt;结构是不是基本清楚&lt;/li&gt;
&lt;li&gt;追加需求后有没有明显跑偏&lt;/li&gt;
&lt;li&gt;改动量变大时，是否还能保持一致性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一两轮对话之后，它已经能把页面从空白推进到一个可继续修改的状态，那这个工具基本就有实用价值了。&lt;/p&gt;
&lt;p&gt;反过来说，如果每次生成都需要你大面积返工，那它带来的就不是提效，而只是把“写代码”换成了“审代码”。&lt;/p&gt;
&lt;h2 id=&#34;结语&#34;&gt;结语
&lt;/h2&gt;&lt;p&gt;在 &lt;code&gt;VS Code&lt;/code&gt; 里接入 &lt;code&gt;Claude&lt;/code&gt; 一类模型，最值得期待的不是“从此不写代码了”，而是很多原本零散、重复、容易打断思路的工作，可以被一次性打包推进。&lt;/p&gt;
&lt;p&gt;更现实的用法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;让它先搭页面和功能骨架&lt;/li&gt;
&lt;li&gt;用连续对话完成两三轮迭代&lt;/li&gt;
&lt;li&gt;自己处理最后那些细小但确定的修改&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样配合下来，AI 更像一个加速器，而不是一个必须完全接管开发流程的替代者。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Windows 上在 VS Code 里构建 Docker 镜像：从环境准备到一键构建</title>
        <link>https://knightli.com/2026/04/16/vscode-docker-image-build-windows/</link>
        <pubDate>Thu, 16 Apr 2026 10:20:00 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/16/vscode-docker-image-build-windows/</guid>
        <description>&lt;p&gt;如果你想在 Windows 上直接用 VS Code 管理并构建 Docker 镜像，流程其实很短。核心就是三步：先把环境装好，再准备 Dockerfile，最后执行构建。&lt;/p&gt;
&lt;h2 id=&#34;01-前置准备&#34;&gt;01 前置准备
&lt;/h2&gt;&lt;p&gt;先确认两项基础条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装并启动 Docker Desktop。&lt;/li&gt;
&lt;li&gt;在 VS Code 里安装 Microsoft 官方 &lt;code&gt;Docker&lt;/code&gt; 扩展。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 Windows 上，建议把 Docker Desktop 切到 &lt;code&gt;WSL 2&lt;/code&gt; 后端（&lt;code&gt;Settings &amp;gt; Resources &amp;gt; WSL Integration&lt;/code&gt;），一般会更稳定、性能也更好。&lt;/p&gt;
&lt;h2 id=&#34;02-准备-dockerfile&#34;&gt;02 准备 Dockerfile
&lt;/h2&gt;&lt;p&gt;如果项目里还没有 Dockerfile，可以直接让 VS Code 生成：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 VS Code 打开你的项目目录。&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;F1&lt;/code&gt; 或 &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; 打开命令面板。&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;Docker: Add Docker Files to Workspace&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;选择你的平台（例如 Node.js、Python、.NET），按提示完成。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;执行后通常会得到至少两个文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.dockerignore&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步的价值是先有一个可工作的基础版本，后面再按项目需求微调。&lt;/p&gt;
&lt;h2 id=&#34;03-构建镜像的三种方式&#34;&gt;03 构建镜像的三种方式
&lt;/h2&gt;&lt;h3 id=&#34;方式-a右键-dockerfile&#34;&gt;方式 A：右键 Dockerfile
&lt;/h3&gt;&lt;p&gt;在资源管理器中右键 &lt;code&gt;Dockerfile&lt;/code&gt;，选择 &lt;code&gt;Build Image...&lt;/code&gt;，然后输入镜像标签（tag）。&lt;/p&gt;
&lt;h3 id=&#34;方式-b命令面板&#34;&gt;方式 B：命令面板
&lt;/h3&gt;&lt;p&gt;按 &lt;code&gt;F1&lt;/code&gt; 运行 &lt;code&gt;Docker: Build Image&lt;/code&gt;，再按提示选择上下文和标签。&lt;/p&gt;
&lt;h3 id=&#34;方式-c集成终端命令&#34;&gt;方式 C：集成终端命令
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker build -t your-image-name .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这条命令表示用当前目录作为构建上下文，生成名为 &lt;code&gt;your-image-name&lt;/code&gt; 的镜像。&lt;/p&gt;
&lt;h2 id=&#34;04-常见问题快速检查&#34;&gt;04 常见问题快速检查
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Docker Desktop 没启动：先确认托盘图标显示为运行状态。&lt;/li&gt;
&lt;li&gt;构建很慢：优先检查是否启用 WSL 2 后端。&lt;/li&gt;
&lt;li&gt;构建失败提示找不到文件：确认执行目录是项目根目录，且 &lt;code&gt;Dockerfile&lt;/code&gt; 在上下文内。&lt;/li&gt;
&lt;li&gt;扩展看不到 Docker 资源：重启一次 VS Code，或确认 Docker CLI 可用（&lt;code&gt;docker version&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;在 Windows 上用 VS Code 构建 Docker 镜像并不复杂。先安装 Docker Desktop 和 Docker 扩展，再用命令面板生成 Dockerfile，最后用右键或 &lt;code&gt;docker build&lt;/code&gt; 即可完成日常构建流程。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>使用 Agent Skills 取代 VS Code 中 Copilot 的“生成提交消息”的功能</title>
        <link>https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/</link>
        <pubDate>Mon, 06 Apr 2026 13:09:49 +0800</pubDate>
        
        <guid>https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/</guid>
        <description>&lt;p&gt;VS Code 的 GitHub Copilot “生成提交消息” 是一个非常实用的功能。配额用尽以后重置周期会非常长。
本文是使用本地 Agent Skills，取代这个功能的一个尝试。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1.png&#34;
	width=&#34;645&#34;
	height=&#34;194&#34;
	srcset=&#34;https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1_hu_6b81e604b29d8606.png 480w, https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1_hu_5f11e2ea13cbceb8.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;生成提交消息&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;332&#34;
		data-flex-basis=&#34;797px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;问题与目标&#34;&gt;问题与目标
&lt;/h2&gt;&lt;p&gt;本文目标是提供一套可直接落地的替代方案：使用 &lt;code&gt;git-commit-push-zh&lt;/code&gt; skill agents 完成标准化提交与推送。&lt;/p&gt;
&lt;h2 id=&#34;替代方案git-commit-push-zh&#34;&gt;替代方案：&lt;code&gt;git-commit-push-zh&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;该 skill 将“当前改动”收敛为固定流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查看变更状态。&lt;/li&gt;
&lt;li&gt;确认当前分支。&lt;/li&gt;
&lt;li&gt;暂存改动。&lt;/li&gt;
&lt;li&gt;生成中文提交信息。&lt;/li&gt;
&lt;li&gt;执行 commit。&lt;/li&gt;
&lt;li&gt;推送到远端分支。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对应命令如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status --short
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --show-current
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add -A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;中文提交信息&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin &amp;lt;当前分支&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;提交信息建议规范&#34;&gt;提交信息建议规范
&lt;/h2&gt;&lt;p&gt;建议统一格式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;类型&amp;gt;(&amp;lt;范围&amp;gt;): &amp;lt;中文摘要&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;类型示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat&lt;/code&gt;：新增功能&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix&lt;/code&gt;：修复问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs&lt;/code&gt;：文档更新&lt;/li&gt;
&lt;li&gt;&lt;code&gt;refactor&lt;/code&gt;：代码重构&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore&lt;/code&gt;：维护性改动&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat(site): 新增全站 head 广告脚本注入&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix(i18n): 修正 relref 相关文章链接路径&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore(content): 合并 AI 工作流分类到 AI工具&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;常见失败场景&#34;&gt;常见失败场景
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nothing to commit&lt;/code&gt;：当前无可提交改动，停止推送即可。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt; 失败：优先检查权限、远端分支状态、冲突。&lt;/li&gt;
&lt;li&gt;SSH/权限异常：确认凭据与权限后再重试。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;附录原始-skillmd&#34;&gt;附录：原始 &lt;code&gt;SKILL.md&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;以下内容为 &lt;code&gt;git-commit-push-zh&lt;/code&gt; 的原始文档，原样保留，便于后续复用与维护。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: git-commit-push-zh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: 在当前 Git 仓库中将“当前更改”完成一次标准提交流程：检查状态、暂存变更、生成中文提交信息、执行 commit 并 push 到当前分支对应远端。用户提出“提交代码”“提交当前更改”“生成中文提交信息并推送”“git commit push 中文说明”等请求时使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# 中文提交并推送
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;使用此技能将当前仓库改动一次性提交并推送到远端。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 工作流程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 查看变更状态：&lt;span class=&#34;sb&#34;&gt;`git status --short`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 确认当前分支：&lt;span class=&#34;sb&#34;&gt;`git branch --show-current`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 暂存当前变更：&lt;span class=&#34;sb&#34;&gt;`git add -A`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 生成中文提交信息（简洁、可检索）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;5.&lt;/span&gt; 执行提交：&lt;span class=&#34;sb&#34;&gt;`git commit -m &amp;#34;&amp;lt;中文提交信息&amp;gt;&amp;#34;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;6.&lt;/span&gt; 执行推送：&lt;span class=&#34;sb&#34;&gt;`git push origin &amp;lt;当前分支&amp;gt;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 提交信息规范（中文）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 建议格式：&lt;span class=&#34;sb&#34;&gt;`&amp;lt;类型&amp;gt;(&amp;lt;范围&amp;gt;): &amp;lt;中文摘要&amp;gt;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 类型示例：&lt;span class=&#34;sb&#34;&gt;`feat`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`fix`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`chore`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`docs`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`refactor`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 摘要要求：准确描述本次改动，不写空话。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 若仅少量变更，也保持可读性与可检索性。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;示例：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`feat(site): 新增全站 head 广告脚本注入`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`fix(i18n): 修正 relref 相关文章链接路径`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`chore(content): 合并 AI 工作流分类到 AI工具`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 错误处理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 若无可提交变更（nothing to commit），明确告知并停止 push。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 若 push 失败，先回报关键错误（权限、远端不存在、冲突等）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 常见 SSH/权限问题可在用户确认后重试高权限环境。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 输出约定
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 汇报提交哈希、分支名、提交信息。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 汇报 push 结果（成功或失败原因）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 仅在确有失败时提供下一步最小操作建议。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>如何排查由插件引起的 VS Code CPU 占用过高</title>
        <link>https://knightli.com/2026/04/01/vscode-extension-cpu-troubleshooting/</link>
        <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/2026/04/01/vscode-extension-cpu-troubleshooting/</guid>
        <description>&lt;p&gt;VS Code 突然变卡、风扇狂转、CPU 长时间高占用时，最常见原因通常不是编辑器本体，而是扩展插件冲突或插件行为异常。&lt;/p&gt;
&lt;p&gt;这篇文章给你一套可以立即执行的排查路径，优先用最省时间的方法定位问题。&lt;/p&gt;
&lt;h2 id=&#34;先做最快的定位start-extension-bisect&#34;&gt;先做最快的定位：Start Extension Bisect
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Start Extension Bisect&lt;/code&gt; 的核心思路是二分法：
每一轮临时禁用一半扩展并重启，通过你反馈“问题是否仍存在”，快速缩小范围，直到定位到可疑插件。&lt;/p&gt;
&lt;p&gt;操作步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按 &lt;code&gt;Ctrl+Shift+P&lt;/code&gt;（macOS 为 &lt;code&gt;Cmd+Shift+P&lt;/code&gt;）打开命令面板。&lt;/li&gt;
&lt;li&gt;输入并执行 &lt;code&gt;Start Extension Bisect&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;每次重启后观察 CPU 占用和卡顿是否复现。&lt;/li&gt;
&lt;li&gt;重复几轮后，VS Code 会给出可疑扩展列表。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;定位后怎么处理&#34;&gt;定位后怎么处理
&lt;/h2&gt;&lt;p&gt;找到可疑插件后，建议按这个顺序处理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先更新插件到最新版本。&lt;/li&gt;
&lt;li&gt;若无改善，临时禁用该插件 1-2 天观察。&lt;/li&gt;
&lt;li&gt;对于功能可替代的插件，优先换成更轻量方案。&lt;/li&gt;
&lt;li&gt;若必须使用该插件，检查它的高级配置，关闭不必要的实时分析、索引或监听功能。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;两个容易被忽略的放大器&#34;&gt;两个容易被忽略的“放大器”
&lt;/h2&gt;&lt;p&gt;即使主因是插件，以下配置也会放大 CPU 问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;搜索范围过大&lt;br&gt;
例如把构建产物、依赖目录、日志目录也纳入全局搜索，会让插件和文件索引持续高负载。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;文件监控包含大目录或软链接&lt;br&gt;
软链接、缓存目录、自动生成目录容易触发大量文件事件，导致扩展反复工作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以在 &lt;code&gt;settings.json&lt;/code&gt; 中适当排除目录，例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;search.exclude&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/node_modules&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/dist&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/build&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;files.watcherExclude&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/.git/objects/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/node_modules/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;**/dist/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;复盘建议&#34;&gt;复盘建议
&lt;/h2&gt;&lt;p&gt;如果你已经定位到问题插件，建议记录三件事：插件名称、触发场景、最终处理方式。&lt;br&gt;
这样下次迁移环境或重装系统时，可以快速避开同类问题。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;VS Code 高 CPU 占用的排查，最有效路径是先用 &lt;code&gt;Start Extension Bisect&lt;/code&gt; 快速定位，再结合搜索和文件监控范围做收敛。&lt;br&gt;
先定位，再优化，比“盲目禁用一堆插件”更省时间，也更稳定。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>如何在 VS Code 中使用 Codex（从安装到高效实战）</title>
        <link>https://knightli.com/2026/03/20/%E5%A6%82%E4%BD%95%E5%9C%A8-vs-code-%E4%B8%AD%E4%BD%BF%E7%94%A8-codex/</link>
        <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/2026/03/20/%E5%A6%82%E4%BD%95%E5%9C%A8-vs-code-%E4%B8%AD%E4%BD%BF%E7%94%A8-codex/</guid>
        <description>&lt;p&gt;Codex 可以直接在 VS Code 侧边栏中协助你写代码、改 Bug、解释项目和执行命令。&lt;/p&gt;
&lt;h2 id=&#34;1-准备工作&#34;&gt;1. 准备工作
&lt;/h2&gt;&lt;p&gt;开始前请确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code 已更新到较新的稳定版本。&lt;/li&gt;
&lt;li&gt;你可以正常访问OpenAi网站&lt;/li&gt;
&lt;li&gt;项目代码已在本地打开（建议使用 Git 仓库）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-安装扩展&#34;&gt;2. 安装扩展
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;打开 VS Code 的扩展市场（Extensions）。&lt;/li&gt;
&lt;li&gt;搜索并安装：&lt;code&gt;Codex - Codex - OpenAI&#39;s coding agent&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;安装完成后，按提示完成登录授权。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3-打开-codex-侧边栏&#34;&gt;3. 打开 Codex 侧边栏
&lt;/h2&gt;&lt;p&gt;你可以通过任一方式打开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在编辑器右上角点击 &lt;code&gt;Open Codex Sidebar&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;使用命令面板（&lt;code&gt;Ctrl + Shift + P&lt;/code&gt;）搜索 &lt;code&gt;Codex&lt;/code&gt; 并打开。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;打开后，Codex 会读取当前工作区上下文，进入可对话状态。&lt;/p&gt;
&lt;h2 id=&#34;4-常见使用方式&#34;&gt;4. 常见使用方式
&lt;/h2&gt;&lt;h3 id=&#34;41-让它解释代码&#34;&gt;4.1 让它解释代码
&lt;/h3&gt;&lt;p&gt;示例提示词：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;请解释这个文件的核心逻辑，并指出最可能出错的 3 个地方。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;适合你刚接手旧项目时快速建立全局理解。&lt;/p&gt;
&lt;h3 id=&#34;42-让它实现功能&#34;&gt;4.2 让它实现功能
&lt;/h3&gt;&lt;p&gt;示例提示词：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;在现有 API 里新增一个 /healthz 健康检查接口，
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;要求返回版本号和数据库连接状态，并补上基础测试。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;建议把“输入约束”和“验收标准”一起写清楚，生成结果会稳定很多。&lt;/p&gt;
&lt;h3 id=&#34;43-让它修复问题&#34;&gt;4.3 让它修复问题
&lt;/h3&gt;&lt;p&gt;示例提示词：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这个接口在并发下偶发 500，请先定位根因，再给出最小改动修复方案，
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;最后列出回归测试点。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;先“定位”再“修复”，能减少误改和过度重构。&lt;/p&gt;
&lt;h2 id=&#34;5-高质量提示词模板&#34;&gt;5. 高质量提示词模板
&lt;/h2&gt;&lt;p&gt;你可以直接复用下面这个结构：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;背景：这是一个 &amp;lt;技术栈&amp;gt; 项目，当前目标是 &amp;lt;目标&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;约束：不改动 &amp;lt;模块/接口&amp;gt;，兼容 &amp;lt;版本/平台&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;输出：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1) 修改文件列表
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2) 关键代码说明
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3) 验证步骤
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4) 风险与回滚方案
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个模板对“多人协作 + 大项目”非常有帮助。&lt;/p&gt;
&lt;h2 id=&#34;6-常见问题&#34;&gt;6. 常见问题
&lt;/h2&gt;&lt;h3 id=&#34;61-关于免费额度&#34;&gt;6.1 关于免费额度
&lt;/h3&gt;&lt;p&gt;在对话框输入 &amp;lsquo;&#39; 然后选择 状态会出现 额度 重置时间等相关信息&lt;/p&gt;
&lt;h3 id=&#34;62-改动不符合预期&#34;&gt;6.2 改动不符合预期
&lt;/h3&gt;&lt;p&gt;修改完成后查看审核按钮，查看修改细节，不满意选择撤销按钮，可撤销修改。
在后面的步骤中可以把需求拆小，分成多个步骤分别执行。
使用git等代码管理工具，保持小步提交（small commits），方便回滚。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
