<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zoxide on recca0120 技術筆記</title><link>https://recca0120.github.io/tags/zoxide/</link><description>Recent content in Zoxide on recca0120 技術筆記</description><generator>Hugo -- gohugo.io</generator><language>zh-hant-tw</language><lastBuildDate>Mon, 13 Apr 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://recca0120.github.io/tags/zoxide/index.xml" rel="self" type="application/rss+xml"/><item><title>zoxide：讓 cd 有記憶，打兩個字就跳到常用目錄</title><link>https://recca0120.github.io/2026/04/13/zoxide-smarter-cd/</link><pubDate>Mon, 13 Apr 2026 10:00:00 +0800</pubDate><guid>https://recca0120.github.io/2026/04/13/zoxide-smarter-cd/</guid><description>&lt;img src="https://recca0120.github.io/" alt="Featured image of post zoxide：讓 cd 有記憶，打兩個字就跳到常用目錄" /&gt;&lt;p&gt;我的專案散在好幾個資料夾，路徑又長又分散。以前每次切目錄不是 &lt;code&gt;cd ~/some/long/path&amp;lt;TAB&amp;gt;&lt;/code&gt; 就是開 finder 拖進 terminal。後來裝了 &lt;a class="link" href="https://github.com/ajeetdsouza/zoxide" target="_blank" rel="noopener"
 &gt;zoxide&lt;/a&gt;，現在打兩三個字就直接跳過去。&lt;/p&gt;
&lt;p&gt;關鍵是我的 &lt;code&gt;cd&lt;/code&gt; 已經不是 shell builtin 了，是 zoxide 接管的版本——原本的 cd 功能全保留，只是多了記憶能力。&lt;/p&gt;
&lt;h2 id="frecency-是什麼"&gt;&lt;a href="#frecency-%e6%98%af%e4%bb%80%e9%ba%bc" class="header-anchor"&gt;&lt;/a&gt;frecency 是什麼
&lt;/h2&gt;&lt;p&gt;zoxide 用的演算法叫 frecency（frequency + recency）。每個去過的目錄都有分數，去得越頻繁、越近期，分數越高。打 &lt;code&gt;cd foo&lt;/code&gt;，它會在資料庫裡找名字含 &lt;code&gt;foo&lt;/code&gt; 的目錄，選分數最高的那個跳過去。&lt;/p&gt;
&lt;p&gt;看一下資料庫長相：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ zoxide query --score &lt;span class="p"&gt;|&lt;/span&gt; head -5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 230.0 /Users/demo/projects/frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 215.3 /Users/demo/work/api-server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 198.7 /Users/demo/blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 142.1 /Users/demo/oss/some-tool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 98.5 /Users/demo/Downloads
&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;常去的專案分數飆高，久沒碰的自然下沉。資料存在本地 SQLite-like 的檔案，離線、零網路。&lt;/p&gt;
&lt;h2 id="安裝跟初始化"&gt;&lt;a href="#%e5%ae%89%e8%a3%9d%e8%b7%9f%e5%88%9d%e5%a7%8b%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;安裝跟初始化
&lt;/h2&gt;&lt;p&gt;macOS 用 Homebrew：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install zoxide
&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;Linux 一行搞定：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&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;接著要在 shell 設定裡初始化。&lt;strong&gt;最關鍵的一步是選要不要用 &lt;code&gt;--cmd cd&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;做法&lt;/th&gt;
 &lt;th&gt;指令&lt;/th&gt;
 &lt;th&gt;效果&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;預設&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;zoxide init &amp;lt;shell&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新增 &lt;code&gt;z&lt;/code&gt;、&lt;code&gt;zi&lt;/code&gt; 指令，原 &lt;code&gt;cd&lt;/code&gt; 不動&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;取代 cd&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;zoxide init --cmd cd &amp;lt;shell&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;直接把 &lt;code&gt;cd&lt;/code&gt; 換成 zoxide&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;我選後者。因為我平常用 &lt;a class="link" href="https://recca0120.github.io/2024/auto-venv-fish/" &gt;fish shell&lt;/a&gt;，config 長這樣：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.config/fish/config.fish
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;zoxide&lt;/span&gt; init &lt;span class="na"&gt;--cmd&lt;/span&gt; cd &lt;span class="nb"&gt;fish&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;source&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;zsh / bash 用 eval：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ~/.zshrc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;zoxide init --cmd &lt;span class="nb"&gt;cd&lt;/span&gt; zsh&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&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;cd&lt;/code&gt; 整個換掉？因為 zoxide 的 &lt;code&gt;cd&lt;/code&gt; 行為是&lt;strong&gt;原 cd 的超集&lt;/strong&gt;：絕對路徑、相對路徑、&lt;code&gt;cd -&lt;/code&gt;、&lt;code&gt;cd ..&lt;/code&gt; 都正常運作，只有當參數不是合法路徑時才啟動 frecency 查詢。所以沒有 regression 風險。&lt;/p&gt;
&lt;h2 id="日常用法三件事"&gt;&lt;a href="#%e6%97%a5%e5%b8%b8%e7%94%a8%e6%b3%95%e4%b8%89%e4%bb%b6%e4%ba%8b" class="header-anchor"&gt;&lt;/a&gt;日常用法三件事
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;一、打關鍵字直接跳。&lt;/strong&gt; 不用打完整路徑，只要目錄名一部分：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; blog &lt;span class="c1"&gt;# → ~/work/personal-blog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; api &lt;span class="c1"&gt;# → ~/work/api-server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; dotfiles &lt;span class="c1"&gt;# → ~/config/dotfiles&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;strong&gt;二、多關鍵字過濾。&lt;/strong&gt; 名字會撞到的時候，加第二個字串縮小範圍：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; work blog &lt;span class="c1"&gt;# → ~/work/personal-blog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; client api &lt;span class="c1"&gt;# → ~/work/client-project/api&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;match 的規則是「所有關鍵字都要出現在路徑中，最後一個要在最後一段 segment」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、互動式選擇用 &lt;code&gt;zi&lt;/code&gt;。&lt;/strong&gt; 想不起來關鍵字、或有多個候選時：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cdi &lt;span class="c1"&gt;# 因為我用了 --cmd cd，zi 變成 cdi&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;a class="link" href="https://github.com/junegunn/fzf" target="_blank" rel="noopener"
 &gt;fzf&lt;/a&gt; 介面列出所有候選，即時 fuzzy filter。沒裝 fzf 的話先 &lt;code&gt;brew install fzf&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="進階技巧"&gt;&lt;a href="#%e9%80%b2%e9%9a%8e%e6%8a%80%e5%b7%a7" class="header-anchor"&gt;&lt;/a&gt;進階技巧
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;空格觸發補全。&lt;/strong&gt; 在 fish 裡輸入 &lt;code&gt;cd mydir&amp;lt;SPACE&amp;gt;&lt;/code&gt; 會列出多個候選讓你選，對於同名目錄很實用。fish 用戶可以裝強化版補全：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fisher install icezyclon/zoxide.fish
&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;strong&gt;查詢不跳轉。&lt;/strong&gt; 想看 zoxide 會把你帶去哪，但不真的切過去：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide query blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# → /Users/demo/work/personal-blog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide query --list blog &lt;span class="c1"&gt;# 列所有符合的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide query --score &lt;span class="c1"&gt;# 看 frecency 分數&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;strong&gt;手動加入目錄。&lt;/strong&gt; 新 clone 的專案還沒去過，想預先讓 zoxide 知道：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide add ~/projects/new-repo
&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;strong&gt;排除不想被記住的目錄。&lt;/strong&gt; &lt;code&gt;/tmp&lt;/code&gt;、&lt;code&gt;node_modules&lt;/code&gt; 之類的雜訊可以排掉：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="na"&gt;-gx&lt;/span&gt; &lt;span class="nv"&gt;_ZO_EXCLUDE_DIRS&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/tmp/*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*/node_modules/*&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.cache/*&amp;#34;&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;strong&gt;回聲目標路徑。&lt;/strong&gt; 跳之前印出要去哪，避免跳錯：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="na"&gt;-gx&lt;/span&gt; &lt;span class="nv"&gt;_ZO_ECHO&lt;/span&gt; &lt;span class="m"&gt;1&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;strong&gt;從舊工具遷移。&lt;/strong&gt; 之前用 autojump、fasd、z.lua 的可以匯入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide import --from&lt;span class="o"&gt;=&lt;/span&gt;autojump ~/.local/share/autojump/autojump.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zoxide import --from&lt;span class="o"&gt;=&lt;/span&gt;z ~/.z
&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="跟-yazitmux-的組合"&gt;&lt;a href="#%e8%b7%9f-yazitmux-%e7%9a%84%e7%b5%84%e5%90%88" class="header-anchor"&gt;&lt;/a&gt;跟 yazi、tmux 的組合
&lt;/h2&gt;&lt;p&gt;我在 &lt;code&gt;.zshrc&lt;/code&gt; 裡還有另一個 function &lt;code&gt;y&lt;/code&gt;，讓 &lt;a class="link" href="https://github.com/sxyazi/yazi" target="_blank" rel="noopener"
 &gt;yazi&lt;/a&gt; 退出時把當前目錄同步回 shell：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mktemp&lt;/span&gt; &lt;span class="na"&gt;-t&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yazi-cwd.XXXXXX&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;yazi&lt;/span&gt; &lt;span class="nv"&gt;$argv&lt;/span&gt; &lt;span class="na"&gt;--cwd-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;cwd&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cat&lt;/span&gt; &lt;span class="na"&gt;-- &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$cwd&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$cwd&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; !&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;cd&lt;/span&gt; &lt;span class="na"&gt;-- &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$cwd&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 這個 cd 是 zoxide
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;rm&lt;/span&gt; &lt;span class="na"&gt;-f&lt;/span&gt; &lt;span class="na"&gt;-- &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&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;cd&lt;/code&gt; 是 zoxide 接管的版本，所以 yazi 裡瀏覽過的目錄也會自動進 zoxide 的 frecency 資料庫。兩個工具互相餵資料，越用越聰明。&lt;/p&gt;
&lt;p&gt;tmux 裡每個 pane 都是獨立 shell，但 zoxide 的資料庫是全局共享的，在 pane A 去過的目錄，pane B 打 &lt;code&gt;cd foo&lt;/code&gt; 一樣跳得到。&lt;/p&gt;
&lt;h2 id="什麼時候不該用-cmd-cd"&gt;&lt;a href="#%e4%bb%80%e9%ba%bc%e6%99%82%e5%80%99%e4%b8%8d%e8%a9%b2%e7%94%a8-cmd-cd" class="header-anchor"&gt;&lt;/a&gt;什麼時候不該用 &amp;ndash;cmd cd
&lt;/h2&gt;&lt;p&gt;老實說，&lt;code&gt;--cmd cd&lt;/code&gt; 不是沒有爭議。有些人會反對覆蓋 builtin，理由是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;寫 shell script 時會意外吃到 zoxide 的行為&lt;/li&gt;
&lt;li&gt;共享終端給別人用會混淆&lt;/li&gt;
&lt;li&gt;某些 &lt;code&gt;cd&lt;/code&gt; 的 edge case（如 &lt;code&gt;CDPATH&lt;/code&gt;）行為可能不完全一樣&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;zoxide 的實作只在&lt;strong&gt;互動 shell&lt;/strong&gt;裡覆蓋 &lt;code&gt;cd&lt;/code&gt;，script 執行時不會生效，所以第一個問題基本不存在。但如果你在乎純粹性，改用預設的 &lt;code&gt;z&lt;/code&gt; / &lt;code&gt;zi&lt;/code&gt; 一樣能達到 95% 的效果，只是每次要多想一下「這次是 &lt;code&gt;cd&lt;/code&gt; 還是 &lt;code&gt;z&lt;/code&gt;」。&lt;/p&gt;
&lt;p&gt;我個人偏好 &lt;code&gt;--cmd cd&lt;/code&gt;——肌肉記憶懶得改，讓工具適應人而不是人適應工具。&lt;/p&gt;
&lt;h2 id="參考資源"&gt;&lt;a href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%ba%90" class="header-anchor"&gt;&lt;/a&gt;參考資源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/ajeetdsouza/zoxide" target="_blank" rel="noopener"
 &gt;zoxide GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://zoxide.org/" target="_blank" rel="noopener"
 &gt;zoxide 官方教學站&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://batsov.com/articles/2025/06/12/zoxide-tips-and-tricks/" target="_blank" rel="noopener"
 &gt;zoxide: Tips and Tricks — Bozhidar Batsov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/junegunn/fzf" target="_blank" rel="noopener"
 &gt;fzf Fuzzy Finder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/icezyclon/zoxide.fish" target="_blank" rel="noopener"
 &gt;icezyclon/zoxide.fish — fish 補全強化&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>