<?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/zh-tw/tags/vs-code/</link>
        <description>Recent content in VS Code on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 08 May 2026 13:18:57 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/vs-code/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>VS Code 切換介面語言的方法：中文、英文和其他語言</title>
        <link>https://knightli.com/zh-tw/2026/05/08/vscode-switch-display-language/</link>
        <pubDate>Fri, 08 May 2026 13:18:57 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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/zh-tw/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/zh-tw/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/zh-tw/2026/04/16/vscode-claude-api-coding-workflow/</link>
        <pubDate>Thu, 16 Apr 2026 17:47:17 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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/zh-tw/2026/04/16/vscode-docker-image-build-windows/</link>
        <pubDate>Thu, 16 Apr 2026 10:20:00 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/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;/li&gt;
&lt;li&gt;VS Code 看不到 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 與擴充套件安裝，再用命令面板產生 Dockerfile，最後透過 UI 或 &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/zh-tw/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/zh-tw/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/zh-tw/2026/04/01/vscode-extension-cpu-troubleshooting/</link>
        <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/zh-tw/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;code&gt;Good now&lt;/code&gt; 或 &lt;code&gt;This is bad&lt;/code&gt;。&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/zh-tw/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/zh-tw/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;在對話框輸入 &lt;code&gt;\&lt;/code&gt;，然後選擇「狀態」，會出現額度、重置時間等相關資訊。&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>
