Rust 撰寫、GPU 渲染的原生編輯器。開源免費、無授權綁定、無廣告。 本篇設定由 Cursor 的配置轉換而來,不是從 Sublime Text 直接搬。
為什麼是從 Cursor 轉,不是從 Sublime 轉
Sublime 的 Default (OSX).sublime-keymap 是全域綁定,cmd+p、cmd+h 這類標準快捷鍵會被 snippet 整個吃掉。
而 Cursor 的 keybindings.json 每一條都帶 when 條件(editorLangId == scss),只在對應語言生效 -- 這才是要移植的版本。
| 來源 | 位置 | 用途 |
|---|---|---|
| Cursor 配置 | ~/Documents/Cursor/{settings,keybindings}.json | 本篇的基準 |
| Sublime 配置 | ~/Library/Application Support/Sublime Text/Packages/User/ | 歷史參考,見 05-sublime-text-4.md |
安裝步驟
- 官網 - https://zed.dev/
- 安裝:
brew install --cask zed - 字型需求:Hack,見
03-hack-font.md
設定檔
設定檔版控於本專案,~/.config/zed/ 以 symlink 指向:
# 先備份既有設定
cp ~/.config/zed/settings.json ~/.config/zed/settings.json.bak
ln -sfn ~/Workspace/00_MacOS/02-setup/zed/settings.json ~/.config/zed/settings.json
ln -sfn ~/Workspace/00_MacOS/02-setup/zed/keymap.json ~/.config/zed/keymap.jsonzed/settings.json- 字型、配色、編輯行為zed/keymap.json- 快捷鍵與 snippet
修改後 Zed 會自動重載,不需重啟。
配色
Zed 內建沒有 Monokai(那是 VS Code 內建的)。內建深色主題只有:
One Dark / Ayu Dark / Gruvbox Dark / Andromeda因此比照 Cursor 的做法 -- 挑一個內建主題打底,再覆蓋關鍵色:
"theme_overrides": {
"One Dark": {
"editor.background": "#141418",
"editor.active_line.background": "#444446",
"panel.background": "#0e1218"
}
}Cursor 的
tokenColorCustomizations(語法著色細調)在原始配置中整段被註解掉,故未移植。
快捷鍵
多游標與選取
| 快捷鍵 | 功能 |
|---|---|
control + shift + ↑ / ↓ | 上下加游標 |
control + shift + l | 選取範圍拆成每行一個游標 |
command + d | 選取下一個相同字(可連按累加) |
command + k command + d | 跳過目前這個、選下一個 |
command + shift + d | 有選取則複製選取,無選取則複製整行 |
command + 滑鼠點擊/拖曳 | 加游標/加選取範圍 |
option + 滑鼠拖曳 | 欄選取(矩形) |
滑鼠多游標由
"multi_cursor_modifier": "cmd_or_ctrl"提供,Zed 預設是alt。
導覽與摺疊
| 快捷鍵 | 功能 |
|---|---|
command + shift + 1 | 切換檔案樹焦點(Zed 是 toggle,再按一次回編輯器) |
command + 1 ~ 8 | 切到第 N 個分頁 |
command + 9 | 最後一個分頁 |
command + r | 放棄未存變更、重載檔案 |
command + option + [ / ] | 摺疊/展開 |
command + k command + 1~9 | 摺疊到第 N 層 |
command + k command + 0/command + j | 全部展開 |
command + k command + u / l | 轉大寫/小寫 |
Snippet(依語言限定)
command + shift + c 是除錯輸出的統一鍵,各語言吐出對應寫法:
| 語言 | command + shift + c |
|---|---|
| PHP | var_dump() 區塊(含 meta charset 與 exit()) |
| JavaScript/TypeScript | console.error() + process.exit() |
| Go | _fmt.Println() |
| CSS/SCSS | border: 1px solid rgba(255, 0, 0, .3); 紅框 |
其餘見 zed/keymap.json,主要是 SCSS 的 mixin 與 flex 排版。
❗️
command + shift + l(clearfix)、command + t/y/u(position)、command + g/h/j(display)未移植 -- 這幾組在 Sublime 有,但當初移植到 Cursor 時已主動放棄,故此處比照 Cursor。
格式化
| 快捷鍵 | 功能 |
|---|---|
command + shift + f | 格式化目前檔案 |
command + shift + option + f | 全專案搜尋 |
⚠️ Zed 預設
command + shift + f是全專案搜尋(pane::DeploySearch),command + shift + i才是格式化。 本設定把格式化改到command + shift + f,並把全專案搜尋讓給command + shift + option + f,兩個功能都保住。
縮排兩格要設在兩個地方
tab_size 管不到 prettier,兩者各管一段:
| 設定 | 管什麼 |
|---|---|
"tab_size": 2 | 手打時的縮排 |
"prettier": { "tabWidth": 2 } | 按下格式化之後重排的結果 |
prettier 的選項名是 camelCase(
tabWidth),不是 Zed 慣用的 snake_case -- 因為它是直接透傳給 prettier 的。 另外設"useTabs": false,確保吐出的是空白而非 tab。
❗️ format_on_save 預設是開的
Zed 預設 "format_on_save": "on",每次存檔都會自動格式化。
本設定改為 "off",與 Cursor 的行為一致 -- 只在按下 command + shift + f 時才格式化。
formatter 的選擇
"formatter": "auto"auto 會讓 JSON/JavaScript/CSS 等交給 Zed 內建的 prettier,其餘語言走 language server,不需另外 npm i -g prettier。
踩雷
⚠️ 不要依賴 base_keymap 的 preset
"base_keymap": "SublimeText" 雖然會帶入 Sublime 風格的綁定,但各版本的 preset 內容不同。
實測 1.17.2:GitHub main 分支的 preset 有 ctrl-shift-l,但實際按下去沒有作用。
✅ 要保證有效的綁定,一律明確寫在自己的
keymap.json,不靠 preset 繼承。
Zed 對無效的設定鍵不寫 log
設定檔打錯字時,~/Library/Logs/Zed/Zed.log 不會有任何訊息,警告只出現在 UI。
驗證方式:在 Zed 內按
command + ,開啟settings.json,JSON LSP 會把無效欄位標紅線。
action 名稱要從 binary 撈,不要查文件猜
Zed 的 action 沒有完整的官方清單,而且各版本會變。最準的來源是本機這份執行檔:
# 撈所有 snippet 相關 action
strings -n 6 /Applications/Zed.app/Contents/MacOS/zed | grep -oE "editor::[A-Za-z]*Snippet[A-Za-z]*" | sort -u
# 撈設定鍵名
strings -n 6 /Applications/Zed.app/Contents/MacOS/zed | grep -oE "\b(buffer_font_family|tab_size|soft_wrap)\b" | sort -u檔案 414 MB,
strings要跑數十秒。輸出常與相鄰字串黏在一起(如editor::InsertSnippetRuns實為InsertSnippet+ 文件字串),取前段即可。
綁鍵插入 snippet 的語法
"cmd-i": ["editor::InsertSnippet", { "snippet": "@include $0;" }]三種模式:{"snippet": "..."} 內嵌、{"name": "..."} 具名、{"language": "...", "name": "..."} 限定語言的具名片段。
語言限定的 context 寫法
"context": "Editor && language_name == SCSS"
"context": "Editor && (language_name == CSS || language_name == SCSS)"對應 VS Code 的 "when": "editorLangId == scss"。
待驗證
以下項目尚未確認生效,實際使用時若發現異常,從這裡查起:
| 項目 | 說明 |
|---|---|
["editor::FoldAtLevel", { "level": N }] | action 確認存在,但 level 參數名為推測 |
命令列無法驗證:截圖需螢幕錄製權限、Zed 又不寫設定錯誤 log,只能目視確認。
已驗證
theme_overrides有效(2026-08-29 目視確認)-- 雖然在 1.17.2 的 binary 字串中撈不到此鍵,但實際套用後編輯器底色確實變為#141418、面板為#0e1218、當前行為#444446。
相關參考
- 官方文件 - https://zed.dev/docs/
- 全部 action - https://zed.dev/docs/all-actions
- 快捷鍵設定 - https://zed.dev/docs/key-bindings
- Sublime Text 舊設定 -
05-sublime-text-4.md