見出し画像

zoxide + fzf でターミナル移動が一瞬になる方法

今回は、自分が業務で実際に使っているコマンドを紹介します。

正直、自分で言うのもなんですが、今回の記事、有料級だと思っています(笑)
それくらいエンジニアにとってインパクトのある便利コマンドです。

さて、今回紹介するのは ターミナルでのフォルダ移動を劇的に楽にする方法です。

「フォルダ移動なら cd コマンドで十分では?」
と思う方もいるかもしれません。

しかし、プロジェクトによっては 量のリポジトリを扱うこともありますよね。

そんなとき、こんな経験はありませんか?

  • 「さっきいたフォルダどこだっけ…」

  • 「cd ../../.. を何回打てばいいんだ…」

もちろん cd コマンドでも移動できます。
でも実は、もっと楽な方法があります。

それが

zoxide + fzf

です。

エンジニアなら 絶対に入れておいた方がいいレベルのコマンドなので、ぜひ試してみてください。


zoxideとは

zoxideは、一言でいうと

よく使うディレクトリを覚えてくれる cd コマンド

です。

普段どおり cd を使っているだけで

  • よく行くディレクトリ

  • 最近使ったディレクトリ

  • 使用頻度

を自動で記録してくれます。

そして次からは

z フォルダ名

これだけで、そのディレクトリへ移動できます。

例えば

cd ~/workspace/project/backend/api

みたいな長いパスも、

z api

だけで移動できます。


どれくらい楽になるのか

普段のターミナル操作はこんな感じになりがちです。

cd ~/workspace/project/backend/api

また別の場所へ行くときも

cd ~/workspace/project/frontend

長いパスを打つこともあれば、

cd ../../..

みたいな移動もよくあります。

zoxideを使うとこうなります。

z api
z frontend

数文字打つだけでディレクトリに移動できます。

この差は地味に見えて、毎日の作業ではかなり効いてきます。


fzfを組み合わせるとさらに便利

ここで登場するのが fzf です。

fzfは

ターミナルで使える高速検索ツール

です。

zoxideには

zi

というコマンドがあります。

これを使うと、過去に訪れたディレクトリを

検索しながら選択できるUI

が表示されます。

zi

と打つと

  • 過去に行ったディレクトリ一覧

  • リアルタイム検索

  • プレビュー表示

などが使える検索画面が表示されます。

「あのフォルダーどこだっけ」

という時でも、数文字入力するだけで見つかります。
自分のターミナルではこんな感じでフォルダー検索できます。



Ctrl + j で検索を開く

さらに自分の環境では

Ctrl + j

を押すと zi が起動するようにしています。

つまり

(1) Ctrl + j を押す
(2) ディレクトリ検索UIが開く
(3) Enterで移動

これだけです。

体感としては

ファイル検索ツールを開く感覚でディレクトリ移動できます。

設定は以下です。

# zoxideの設定を追加
# install: https://formulae.brew.sh/formula/zoxide
# zoxide init zsh: zshで使うための z / zi などのシェル関数定義を標準出力に出力する
# eval: その出力をコードとして実行し、シェル関数をこのシェルに読み込む
# ※ eval がないと z / zi コマンドが「存在しない」状態になる(バイナリではなくシェル関数のため)
eval "$(zoxide init zsh)"

# Ctrl+j で zoxide (zi) を素早く起動するカスタムウィジェット
function zoxide_fn() {
    #BUFFER はターミナルの入力欄
    #"${BUFFER}zi" の部分は、今入力欄にある文字 + zi という意味で入、力欄が空なら "" + "zi" = "zi" になる
    BUFFER="${BUFFER}zi"
    # コマンドを実行(Enterキーを押したのと同じ動作)
    zle accept-line
}
# カスタム関数をZLEウィジェットとして登録
zle -N zoxide_fn
# Ctrl+j にこのウィジェットをバインド
bindkey "^j" zoxide_fn

fzfの表示をカスタマイズ

さらに zi の検索画面を見やすくするため、fzfのオプションを設定しています。

# https://github.com/ajeetdsouza/zoxide
# zi コマンド実行時に起動する fzf のオプションをカスタマイズする環境変数
export _ZO_FZF_OPTS='
    --no-sort          # zoxide のスコア順を維持(fzf に再ソートさせない)
    --height 75%       # ターミナルの75%の高さで表示
    --reverse          # リストを上から下に表示(通常のfzfは下から上)
    --margin=0,1       # 上下0行・左右1文字のマージン
    --exit-0           # 候補が0件のときは即終了
    --select-1         # 候補が1件のときは自動選択して即終了
    --bind ctrl-f:page-down,ctrl-b:page-up    # Ctrl+f/b でページ送り
    --bind pgdn:preview-page-down,pgup:preview-page-up  # PageDown/Up でプレビューをスクロール
    --prompt="❯ "      # 入力欄の左に表示するプロンプト記号
    --color border:#303030,info:#cfcfb0,header:#80a0ff,spinner:#36c692  # 枠・情報・ヘッダー・スピナーの色
    --color prompt:#87afff,pointer:#ff5189,marker:#f09479               # プロンプト・カーソル・選択マークの色
    # プレビューウィンドウの表示内容:
    # {2..}: fzf の選択行の2列目以降(= ディレクトリパス)
    # README.md があれば bat でシンタックスハイライト表示(先頭50行)
    # なければ eza でディレクトリ内容を1行ずつ一覧表示
    --preview "([[ -e '"'"'{2..}/README.md'"'"' ]] && bat --color=always --style=numbers --line-range=:50 '"'"'{2..}/README.md'"'"') || eza --color=always --group-directories-first --oneline {2..}"
'

この設定では

(1) 表示サイズ
(2) キーバインド
(3) カラー設定
(4) READMEプレビュー

などをカスタマイズしています。


まとめ

ターミナル作業は、細かい移動の積み重ねです。

1日に何十回も cd を打つ人も多いと思います。

zoxideを入れると

(1) よく使うディレクトリに一瞬で移動できる
(2) zi で検索しながらディレクトリを探せる
(3) Ctrl + j で検索UIをすぐ開ける

という感じで、ターミナルの移動がかなり快適になります。

最初は「便利そう」くらいの感覚ですが、
使い始めると これ無しのターミナルに戻れなくなります。

まだ入れていない人は、ぜひ一度試してみてください。


とりあえず試してみたい人向け(Mac)

「設定は後でいいから、とりあえず使ってみたい」という人は
Macなら Homebrew でインストールできます。

brew install zoxide
brew install fzf

次に、ホームディレクトリの .zshrc にこの記事の設定を追加します。

~/.zshrc

このファイルの最後に、この記事で紹介したコードをそのまま貼り付けて保存します。

保存したら、以下のコマンドで設定を読み込みます。

source ~/.zshrc

これで

z
zi

コマンドが使えるようになります。

もし反映されない場合は、ターミナルを再起動しても大丈夫です

めっちゃおすすめのコマンドなので、ぜひ試してみてくださいね!


zoxide
fzf
terminal
cli

いいなと思ったら応援しよう!