蘋果環境

Zed

高效能編輯器

Rust 撰寫、GPU 渲染的原生編輯器。開源免費、無授權綁定、無廣告。 本篇設定由 Cursor 的配置轉換而來,不是從 Sublime Text 直接搬。

為什麼是從 Cursor 轉,不是從 Sublime 轉

Sublime 的 Default (OSX).sublime-keymap全域綁定cmd+pcmd+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

安裝步驟

設定檔

設定檔版控於本專案,~/.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.json

修改後 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 + 18切到第 N 個分頁
command + 9最後一個分頁
command + r放棄未存變更、重載檔案
command + option + [ / ]摺疊/展開
command + k command + 19摺疊到第 N 層
command + k command + 0command + j全部展開
command + k command + u / l轉大寫/小寫

Snippet(依語言限定)

command + shift + c除錯輸出的統一鍵,各語言吐出對應寫法:

語言command + shift + c
PHPvar_dump() 區塊(含 meta charset 與 exit()
JavaScript/TypeScriptconsole.error()process.exit()
Go_fmt.Println()
CSS/SCSSborder: 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 的選項名是 camelCasetabWidth),不是 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

相關參考