iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
AI Engineering

[ opencode ] 開源 AI coding agent系列 第 8

08-opencode | 個人化你的 TUI:themes、keybinds 與 config

  • 分享至 

  • xImage
  •  

! 本篇文章將會介紹 opencode 的 TUI 個人化設定,把工具客製成你的樣子,用得順手才用得長久 :D

TL;DR: https://dev.benben.me/slides/s/ironman-08-theming-keybinds

本篇目標

讀完這篇你會學到:

  • opencode 的兩個設定檔怎麼分工(這個有更新過,很多人也不清楚的)
  • 換主題、自訂 keybinds、改 leader key
  • 設定檔的層級與合併規則

重要觀念:兩個設定檔,各管各的

opencode 的設定分成兩個檔案

檔案 管什麼 例子
opencode.json(c) server / runtime 行為 model、provider、permissions、formatter、LSP
tui.json(c) 介面體驗 theme、keybinds、mouse、scroll、通知音效

對,你沒看錯——主題和快捷鍵現在住在 tui.json。舊版本把這些寫在 opencode.json 的做法已經被列為 deprecated(會自動搬移),新專案請直接寫對地方。

兩種都支援 JSONC(JSON with Comments),可以寫註解:

// ~/.config/opencode/tui.jsonc
{
  "$schema": "https://opencode.ai/tui.json",
  // 這行是註解,寫給未來的自己
  "theme": "tokyonight",
  "keybinds": {
    "leader": "ctrl+x"
  }
}

加上 $schema 之後,編輯器會自動幫你補全跟驗證——設定檔寫錯字當場抓包,不用等到啟動才爆。

設定檔放哪:層級與合併

  • 全域~/.config/opencode/ 底下的 opencode.json / tui.json——你的個人偏好
  • 專案:專案根目錄的 opencode.json / tui.json——可以 commit 進 git 給團隊共用

重要規則:設定是「合併」不是「覆蓋」。全域設了 A、專案設了 B,兩個都會生效;只有同一個 key 衝突時,專案層才贏過全域層。所以全域放共通偏好、專案放差異調整,不會互相清空。

主題:/themes 即時換漂亮主題

最快的方式是 TUI 裡直接輸入 /themes(或 ctrl+x t),即時預覽、選了立即生效。

找到本命之後寫進 tui.json 固定下來:

{"$schema": "https://opencode.ai/tui.json", "theme": "tokyonight"}

每天盯著看八小時的東西,值得花五分鐘挑一套順眼的,這樣就可以看十二小時了(X)。

Keybinds:換掉你的 leader key

還記得 Day 03 的快捷鍵都長 ctrl+x 開頭嗎?ctrl+x 就是 leader key——先按它、再按功能鍵,避免跟 terminal 其他快捷鍵打架。

不順手?tui.json 換掉:

{
  "$schema": "https://opencode.ai/tui.json",
  "leader_timeout": 2000,
  "keybinds": {
    "leader": "ctrl+o", // 換 leader
    "session_new": "<leader>n",
    "command_list": "ctrl+p"
  }
}

以筆者為例,是用 ctrl + o (o for opencode),因為單手要按 ctrl + x,真的不太順手,試試看再跟我分享你的心得!

兩個貼心設計:

  • keybinds 跟內建預設合併——你只寫想改的,其他照舊
  • 想廢掉某個快捷鍵,設成 "none" 就好

leader_timeout(預設 2000ms)決定按完 leader 後等多久算放棄,覺得手忙腳亂可以調長。

順手認識幾個好用的 opencode.json 選項

// 專案 opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "opencode-go/glm-5.3",
  "small_model": "opencode-go/glm-5.3-flash", // 輕量任務用小模型
  "autoupdate": "notify" // 不自動更新,但有新版會通知
}

small_model 是幫標題生成這類雜事省錢用的小模型;多模型策略的完整玩法留到 Day 20。另外還有個變數魔術:{env:變數名} 可以引用環境變數、{file:路徑} 可以引用檔案內容——放 API key 特別好用,不會把機密硬塞進設定檔。

小小測驗:同事說「我把 theme 寫在 opencode.json 怎麼沒生效」——你會先檢查什麼?
答案:該寫在 tui.json。舊位置已 deprecated,雖然會自動搬移,但直接寫對地方才是正解。

常見問題 / 踩坑記錄

  • Q:jsonc 的註解會不會弄壞設定?
    A:不會,原生支援。但 JSON 檔(副檔名 .json)不行,別搞混。
  • Q:全域和專案的 tui.json 都設了 theme,聽誰的?
    A:專案層贏。跟 opencode.json 同一套合併規則。
  • Q:滑鼠捲動跟 terminal 選取文字打架?
    A:tui.jsonmouse 設為 false,還原 terminal 原生行為。

小結

  • 兩個設定檔:opencode.json 管行為、tui.json 管介面(theme / keybinds 都在這)
  • 設定會合併:全域放偏好、專案放差異,衝突時專案贏
  • $schema + JSONC 註解,讓設定檔好寫好維護

明日預告

Day 09:LSP 與 formatters——幫 AI 裝上眼睛與尺,改得更準、格式一次到位。


參考資料:


有任何疑問但沒有 iT 邦幫忙帳號,或是想匿名提問?
歡迎到 https://dev.benben.me/q/P3C5U6 提問或加油打氣,沒意外的話會在完賽之後一起回答 :D


上一篇
07-opencode | /undo 與 /redo:放心讓 AI 動手的安全網
系列文
[ opencode ] 開源 AI coding agent8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言