{"id":24630637,"url":"https://github.com/zhenshuo2021/dotfiles","last_synced_at":"2026-04-17T17:31:25.041Z","repository":{"id":280380918,"uuid":"936907545","full_name":"ZhenShuo2021/dotfiles","owner":"ZhenShuo2021","description":"Unleash blazing fast Zsh with single line installation!","archived":false,"fork":false,"pushed_at":"2025-03-15T13:52:43.000Z","size":2081,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-15T14:33:42.370Z","etag":null,"topics":["chezmoi","dotfiles","dotfiles-linux","dotfiles-macos","neovim","wezterm","zcomet","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZhenShuo2021.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-21T22:46:28.000Z","updated_at":"2025-03-12T15:24:08.000Z","dependencies_parsed_at":"2025-03-03T05:35:47.095Z","dependency_job_id":null,"html_url":"https://github.com/ZhenShuo2021/dotfiles","commit_stats":null,"previous_names":["zhenshuo2021/dotfiles"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZhenShuo2021%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZhenShuo2021%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZhenShuo2021%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZhenShuo2021%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZhenShuo2021","download_url":"https://codeload.github.com/ZhenShuo2021/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244560389,"owners_count":20472218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chezmoi","dotfiles","dotfiles-linux","dotfiles-macos","neovim","wezterm","zcomet","zsh"],"created_at":"2025-01-25T07:12:29.532Z","updated_at":"2026-04-17T17:31:25.034Z","avatar_url":"https://github.com/ZhenShuo2021.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eMy Zsh Dotfile Built for Speed!\u003c/h1\u003e\n\n\u003c/br\u003e\n\n![](.github/dotfiles-demo.webp)\n\n## How Fast Is It\n\n使用專門測試 shell 的 [zsh-bench](https://github.com/romkatv/zsh-bench/) 進行測試[^test-method]，測試項目涵蓋五種框架：\n\n- Oh-My-ZSH: 最多人使用的框架\n- Zinit: 內建豐富延遲載入功能的插件管理器\n- No Plugin Manager: 不使用插件管理器以減少延遲\n- Zim: 標榜 [blazing speed](https://github.com/zimfw/zimfw/wiki/Speed) 的插件管理器\n- zcomet: 此份 dotfile\n- Baseline: 基準線，移除 .zshrc，本機能達到的最快速度\n\n所有框架都公平的使用 zsh-defer 加速，測試項目的選擇從最廣泛使用的框架到手動優化，以便準確定位效能，可以看到比 Zinit 更快，基本上追平甚至超越不使用插件管理器的速度，同時又比 Zim 易於設定。\n\n![](.github/benchmark-defer.svg)\n\n[^test-method]: 測試執行於 M1 MacBook Pro 8G RAM，zsh-bench 使用預設值，測試總共載入的插件有 powerlevel10k, zsh-defer, zsh-syntax-highlighting, zsh-autosuggestions, zsh-completions, zsh-z, zsh-history-substring-search, extract, git。\n\n## Feature\n\n不只快而且功能齊全。\n\n- 🚀 0.03s 的首次命令延遲\n- 📂 集中管理安裝腳本和設定檔\n- 📚 完整註解\n- 🛠️ 易於調整\n- 🔲 極簡風格：沒有花花綠綠的分散注意力\n- 🎨 WezTerm 主題\n- ✏️ neovim 設定檔\n- ✅ zsh-syntax-highlighting 語法上色\n- ✅ zsh-autosuggestions 指令歷史建議\n- ✅ zsh-completions 指令補全\n- ✅ zsh-z 快速切換目錄\n- ✅ colored-man-pages\n- ✅ GPG、homebrew 和 Git 等套件的常見問題都已經解決\n- ✅ 指令補全\n\n## 安裝\n\n```shell\nASK=1 sh -c \"$(curl -fsSL https://raw.githubusercontent.com/ZhenShuo2021/dotfiles/main/remote_install.sh) -k -v\"\n```\n\n首次執行不會完整安裝，因為 GPG 等需要進一步設定，移除 `ASK=1` 會使用預設名稱作為電腦和用戶名，再次執行 `chezmoi -k apply` 可以進行後續部分的安裝。\n\n其他常用的 chezmoi 指令請查看 Makefile。\n\n## 最簡安裝\n\n最簡安裝只會複製 Shell 設定不會安裝額外工具。\n\n```sh\nMINIMUM=1 sh -c \"$(curl -fsSL https://raw.githubusercontent.com/ZhenShuo2021/dotfiles/main/remote_install.sh) -k -v\"\n```\n\n如果使用 Git Bash 安裝完成後還要手動完成以下步驟：\n\n```sh\n# 開啟 Git Bash\n\n# 設定檔捷徑\nln -s ~/.config/zsh/zshrc ~/.zshrc\nln -s ~/.config/zsh/zshenv ~/.zshenv\n\n# 預設使用 Zsh\n$ echo \"if [ -t 1 ]; then exec zsh; fi\" \u003e ~/.bashrc\n\n# 移動 Git 設定位置\nmkdir -p ~/.config/git\nmv ~/.gitconfig ~/.config/git/gitconfig\nmv ~/.gitignore_global ~/.config/git/gitignore_global\n\n# 啟用 Zsh 完成後續插件安裝\nexec zsh\n```\n\n## 修改\n\nzshrc 相關設定在 `~/.local/share/chezmoi/home/private_dot_config/zsh` 中，由以下組成\n\n1. 00-basic.zsh: 基礎路徑設定，指向 Zsh 設定檔和 chezmoi 裡面的設定檔\n2. 01-plugins.zsh: 載入插件\n3. 02-preference.zsh: 各種路徑和常數設定\n4. 03-system.zsh: 設定 `setopt` 和 `bindkey`\n5. 04-completion.zsh: 設定自動補全\n6. 05-misc.zsh: 其餘雜項，如 zsh-hook\n7. 99-alias.zsh: 設定別名，可以任意修改\n8. 100-p10k.zsh: p10k 設定檔\n\n我的工作流程是使用 `c [tab]` 跳轉到 chezmoi 目錄，`cn` 開啟 VSCode，最後使用 `make apply` 應用到主目錄。\n\n## Profiling\n\n內建函式可以方便的進行效能分析，有兩個指令：\n\n1. `zsh_prof_zprof` 使用 `zprof` 指令進行分析，提供數字參數以設定顯示行數，數字以外的參數顯示所有結果。\n2. `zsh_prof_xtrace` 藉由 `XTRACE` 和 `EPOCHREALTIME` 生成更細節的報告，使用 `zsh_prof_xtrace -h` 查看使用方式。\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"90%\" height=\"90%\" alt=\"profiling\" src=\"https://github.com/user-attachments/assets/5240c98d-f693-47b3-865b-40bfebb2efb7\" /\u003e\n\u003c/p\u003e\n\n## 快捷鍵列表\n\n優化直覺性，盡量同步成系統內建用法。\n\n\u003cdetails\u003e\n\n\u003csummary\u003e終端機\u003c/summary\u003e\n\n**Warp**: 同 WezTerm\n**WezTerm**:\n\n- `⌘`: SUPER\n- `⌘`+`^`: SUPER_REV\n- `⌥`: ALT\n\n```lua\nif platform.is_mac then\n   mod.SUPER = 'SUPER'\n   mod.SUPER_REV = 'SUPER|CTRL'\nelseif platform.is_win or platform.is_linux then\n   mod.SUPER = 'ALT' -- to not conflict with Windows key shortcuts\n   mod.SUPER_REV = 'ALT|CTRL'\nend\n```\n\n- 視窗\n  - 垂直分割: `SUPER`+`d`\n  - 水平分割: `SUPER`+`D`\n  - 切換: `SUPER_REV` + `方向鍵`\n- 原本的背景圖片放在 backdrops/archive 裡面，移出來就可以有隨機背景圖片。\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003eNeovim\u003c/summary\u003e\n\n這其實是一個速查表，大部分都是預設值。\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003e按鍵\u003c/th\u003e\n    \u003cth\u003e說明\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003ea\u003c/code\u003e/\u003ccode\u003es\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e在光標前/後插入\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl+d\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e黑洞刪除\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl+o\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e回到上一個位置 (等同 vscode Ctrl+-)\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eHome\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e仿照 vscode 的智慧 Home 鍵\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003e*\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e下一個文字出現位置\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eg-d\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e跳到變數定義位置\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl-f\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e往下捲動10行\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl-b\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e往上捲動10行\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl-o\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e回到前一個位置\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eSpace-e\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e開啟檔案瀏覽器\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eCtrl+H/L\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e切換檔案瀏覽器聚焦位置\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eShift+H/L\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e切換檔案瀏覽器中開啟的檔案\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eSpace-b-d\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e光標切換檔案/檔案瀏覽器\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eh\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e在檔案瀏覽器中回到上一層\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003eGit\u003c/summary\u003e\n\n大量參考 [mathiasbynens](https://github.com/mathiasbynens/dotfiles)，可使用 `git aliases` 查看 git 系統內的 alias，別名來源有三個：\n\n1. [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git)\n2. src/bin/ 裡面的會被綁定到 .gitconfig 裡面作為 alias 使用\n3. src/zsh/alias.zsh 是最高層級，會覆蓋所有 alias\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003e指令\u003c/th\u003e\n    \u003cth\u003e全名\u003c/th\u003e\n    \u003cth\u003e用途簡介\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egc\u003c/td\u003e\n    \u003ctd\u003egit commit\u003c/td\u003e\n    \u003ctd\u003e提交變更\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egc!\u003c/td\u003e\n    \u003ctd\u003egit commit --amend --no-verify\u003c/td\u003e\n    \u003ctd\u003e合併上一提交\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egca\u003c/td\u003e\n    \u003ctd\u003egit commit -a\u003c/td\u003e\n    \u003ctd\u003e提交追蹤檔案\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egco\u003c/td\u003e\n    \u003ctd\u003egit checkout\u003c/td\u003e\n    \u003ctd\u003e切換分支\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egcb\u003c/td\u003e\n    \u003ctd\u003egit copy-branch-name\u003c/td\u003e\n    \u003ctd\u003e複製分支名稱\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egcp\u003c/td\u003e\n    \u003ctd\u003egit cherry-pick\u003c/td\u003e\n    \u003ctd\u003e複製提交\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egtlll\u003c/td\u003e\n    \u003ctd\u003egtlll(){ git tag --sort=-v:refname -n999 --format=\"[%(objectname:short) %(refname:short)] %(contents:lines=999)%0a\" --list \"${1}*\" }; noglob gtlll\u003c/td\u003e\n    \u003ctd\u003e尋找指定標籤，無輸入就列出所有，類似指令有 gtll/gtl\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrb\u003c/td\u003e\n    \u003ctd\u003egit rebase\u003c/td\u003e\n    \u003ctd\u003e變基\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrba\u003c/td\u003e\n    \u003ctd\u003egit rebase --abort\u003c/td\u003e\n    \u003ctd\u003e中止變基\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrbc\u003c/td\u003e\n    \u003ctd\u003egit rebase --continue\u003c/td\u003e\n    \u003ctd\u003e繼續變基\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrbi\u003c/td\u003e\n    \u003ctd\u003egit rebase --interactive\u003c/td\u003e\n    \u003ctd\u003e互動式變基\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrbo\u003c/td\u003e\n    \u003ctd\u003egit rebase --onto\u003c/td\u003e\n    \u003ctd\u003e指定基底變基\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egrbs\u003c/td\u003e\n    \u003ctd\u003egit rebase --skip\u003c/td\u003e\n    \u003ctd\u003e跳過當前提交\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egb\u003c/td\u003e\n    \u003ctd\u003egit branch\u003c/td\u003e\n    \u003ctd\u003e顯示分支\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egs\u003c/td\u003e\n    \u003ctd\u003egit status -sb\u003c/td\u003e\n    \u003ctd\u003e簡要狀態\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ege\u003c/td\u003e\n    \u003ctd\u003egit-edit-new\u003c/td\u003e\n    \u003ctd\u003e編輯新檔\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egl\u003c/td\u003e\n    \u003ctd\u003egit pull --prune\u003c/td\u003e\n    \u003ctd\u003e拉取更新\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eglog\u003c/td\u003e\n    \u003ctd\u003egit log --graph ...\u003c/td\u003e\n    \u003ctd\u003e顯示提交圖\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egloga\u003c/td\u003e\n    \u003ctd\u003egit log --graph ...\u003c/td\u003e\n    \u003ctd\u003e顯示提交樹\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egp\u003c/td\u003e\n    \u003ctd\u003egit push\u003c/td\u003e\n    \u003ctd\u003e推送分支\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egp!\u003c/td\u003e\n    \u003ctd\u003egit push --force-with-lease --force-if-includes\u003c/td\u003e\n    \u003ctd\u003e強制推送\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egd\u003c/td\u003e\n    \u003ctd\u003egit diff --color | sed ...\u003c/td\u003e\n    \u003ctd\u003e顯示差異\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e系統\u003c/summary\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003e指令\u003c/th\u003e\n    \u003cth\u003e全名\u003c/th\u003e\n    \u003cth\u003e用途簡介\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ev\u003c/td\u003e\n    \u003ctd\u003envim\u003c/td\u003e\n    \u003ctd\u003e啟動 Neovim Editor\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ec\u003c/td\u003e\n    \u003ctd\u003eN/A\u003c/td\u003e\n    \u003ctd\u003e自訂的函式可設定目錄快速跳轉\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecn\u003c/td\u003e\n    \u003ctd\u003ecode -n .\u003c/td\u003e\n    \u003ctd\u003e以編輯器開啟目前目錄，和 c 合併使用非常方便\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ee\u003c/td\u003e\n    \u003ctd\u003eexit 0\u003c/td\u003e\n    \u003ctd\u003e退出終端\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eswitch_en\u003c/td\u003e\n    \u003ctd\u003eexport LC_ALL='en_US.UTF-8'; export LANG='en_US.UTF-8'\u003c/td\u003e\n    \u003ctd\u003e暫時切換到英語系統\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eswitch_twn\u003c/td\u003e\n    \u003ctd\u003eexport LC_ALL='zh_TW.UTF-8'; export LANG='zh_TW.UTF-8'\u003c/td\u003e\n    \u003ctd\u003e暫時切換到中文系統\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egpg_test\u003c/td\u003e\n    \u003ctd\u003eecho test | gpg --clear-sign\u003c/td\u003e\n    \u003ctd\u003e測試 GPG 是否能正確簽署\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egpg_reload\u003c/td\u003e\n    \u003ctd\u003egpgconf --kill gpg-agent; gpgconf --reload gpg-agent\u003c/td\u003e\n    \u003ctd\u003e重新載入 GPG\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003egpg_[tab]\u003c/td\u003e\n    \u003ctd\u003e顯示所有 gpg alias\u003c/td\u003e\n    \u003ctd\u003e更多常用的 alias 都已經內建不浪費篇幅\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ehnc\u003c/td\u003e\n    \u003ctd\u003ehugo new content\u003c/td\u003e\n    \u003ctd\u003e新增 Hugo 內容文章\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003els\u003c/td\u003e\n    \u003ctd\u003els --color=auto --group-directories-first\u003c/td\u003e\n    \u003ctd\u003e列出檔案\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003el\u003c/td\u003e\n    \u003ctd\u003els\u003c/td\u003e\n    \u003ctd\u003els 的縮寫\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ell\u003c/td\u003e\n    \u003ctd\u003els --color=auto -A --group-directories-first\u003c/td\u003e\n    \u003ctd\u003e列出隱藏檔案\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003el3\u003c/td\u003e\n    \u003ctd\u003els --color=auto -lAh --time-style=+'' --group-directories-first\u003c/td\u003e\n    \u003ctd\u003e列出檔案屬性但是不顯示時間和隱藏檔案\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003el4\u003c/td\u003e\n    \u003ctd\u003els --color=auto -lahF --time-style='+[%Y-%m-%d %H:%M:%S]' --group-directories-first\u003c/td\u003e\n    \u003ctd\u003e列出檔案所有檔案屬性\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ereload!\u003c/td\u003e\n    \u003ctd\u003e. ~/.zshrc\u003c/td\u003e\n    \u003ctd\u003e重新載入 Zsh\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003e..\u003c/code\u003e \u003ccode\u003ecd..\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003ecd ..\u003c/td\u003e\n    \u003ctd\u003e回上一層\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003e...\u003c/code\u003e \u003ccode\u003ecd...\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003ecd ../..\u003c/td\u003e\n    \u003ctd\u003e回兩層\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003e....\u003c/code\u003e \u003ccode\u003ecd....\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003ecd ../../..\u003c/td\u003e\n    \u003ctd\u003e回三層\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003epubkey\u003c/td\u003e\n    \u003ctd\u003emore ~/.ssh/id_rsa.pub | pbcopy\u003c/td\u003e\n    \u003ctd\u003e複製公鑰\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003edocker-compose\u003c/td\u003e\n    \u003ctd\u003e例如 dco=docker-compose\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker-compose\" target=\"_blank\"\u003e使用插件\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n# FAQ\n\n- 補全設定  \nZsh 本身的補全系統很麻煩，大量使用 zsh-defer 又讓偵錯更麻煩，偵錯時建議暫時移除所有 zsh-defer 才會顯示錯誤訊息。使用 `echo _comps[your_function]` 檢查是否印出函式才表示正確啟用，Zsh 補全系統的載入順序為\n  1. 設定 fpath\n  2. 設定 zstyle\n  3. 執行 compinit\n  4. 執行 functions requires compdef\n  5. 執行 zsh-syntax-highlighting \u003e zsh-autosuggestions  \n這幾項設定加上 `eval $(/opt/homebrew/bin/brew shellenv)` 是影響補全是否成功啟用的關鍵節點，試著把補全設定放在這些指令前後進行測試，或者是手動載入 `autoload -Uz /path/to/_completion-file` 補全檔案。  \n\n- 遇到奇怪的問題  \n通常原因是延遲載入 brew，如果不想處理就改為不使用 zsh-defer 載入補全系統，方式是將補全系統初始化 compinit 移動到 plugin.zsh 中，並且把 eval brew shellenv 移動到 .zprofile，最後移除 preference.zsh 的 brew PATH。\n\n- 為何使用 zcomet?  \n語法簡單而且支援直接載入 url，比起 Zinit 更輕量快速，就算遇到問題直接切換到 Zinit 也非常容易。\n\n- 為何不用 Zim?  \nZim 需要管理額外的 .zimrc 文件，也不支援直接載入 url，最重要的是難以獨立設定哪些插件需要使用 zsh-defer，如果不使用延遲加載，所有插件管理器都差不多慢。\n\n- 為何不用 Zinit?  \n語法過於複雜，本體載入速度也太慢，請見 [zsh-plugin-manager-benchmark](https://github.com/rossmacarthur/zsh-plugin-manager-benchmark)。\n\n- 為何不用 zsh4humans?  \nz4h [是最快的插件管理器](https://github.com/zimfw/zimfw/wiki/Speed)，但是我不想要一個強迫使用 p10k、設定混亂、會覆蓋我 zshrc 的插件管理器，如果沒有這些問題他會是完美的。\n\n- 為何不用 antidote?  \n有太多 anti* 的插件管理器了，我不知道他會不會又停止開發，而且正好在換代到 V2。\n\n- 如何更快?  \n現在的效能瓶頸在主題和插件管理器本身的載入，現在的啟動速度已經足夠快沒有進一步優化的必要，兩個優化方法是主題改用 [pure](https://github.com/sindresorhus/pure)，並且移除插件管理器[手動管理插件](https://github.com/romkatv/zsh-bench/blob/661fc46c74fd970f00346d285f5ae434130491f0/configs/diy%2B%2B/skel/.zshrc)（如果你不使用 diy++ 的方式設定，速度會比使用插件管理器還慢）。\n\n- 我想從根本加速  \n現在就幾乎是最快的設定，不可能更快了，直接改用 fish shell 才能從根本解決問題。\n\n- 繪製自己的測試結果：將數據更新在 .github/benchmark.py 後使用 `uv run .github/benchmark.py` 可以直接執行不需建立虛擬環境。\n\n# Acknowledgments\n\n- Code is based on [narze's dotfile (MIT License)](https://github.com/narze/dotfiles)\n- Snippets from [Holman's dotfile (MIT License)](https://github.com/holman/dotfiles), [mathiasbynens (MIT License)](https://github.com/mathiasbynens/dotfiles)\n- The idea of modularization comes from [xero's dotfile](https://github.com/xero/dotfiles/tree/main/zsh/.config/zsh)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhenshuo2021%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhenshuo2021%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhenshuo2021%2Fdotfiles/lists"}