0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

zshにfzf-marksを導入してディレクトリ移動を高速化する

0
Last updated at Posted at 2026-09-25

目的

zshでディレクトリ間を移動する際、cdで長いパスを毎回タイプしたり、cd -やpushdスタックの順番を覚えておくのが面倒だった。過去訪れたディレクトリに移動できるzoxideというツールもあるが、移動先はもうちょっとコントロールしたい。fzfでよく使うディレクトリをファジー検索してジャンプできるfzf-marksを導入し、かなり体験が良くなったので、紹介がてらその手順と設定上の注意点をまとめる。

fzf-marksとは

fzf-marksは、任意のディレクトリを「ブックマーク」として登録しておき、fzfのインクリメンタル検索でマーク一覧から選んでそのディレクトリへ一発でジャンプできるzshプラグイン。

主なコマンド・キーバインドは以下(デフォルト)。

操作 キー / コマンド
カレントディレクトリをマークに追加 mark <マーク名>
マーク一覧を表示してジャンプ Ctrl-g
検索結果へ移動 Ctrl-y
削除対象のマークを選択 Ctrl-t
選択したマークを削除 Ctrl-d

マークは~/.fzf-marksに保存される(FZF_MARKS_FILEで変更可能)。なおCtrl-g以外の操作はfzfのポップアップ表示中のみ有効なキー操作であり、選択したマークへのジャンプはEnterキーでも行える。

環境

  • macOS(Darwin 27.0.0)
  • zsh + antidote(プラグインマネージャ)

導入

僕の.zshrcはantidoteでプラグインを管理していて、zsh_plugins.txtに1行追加するだけで導入できた。

 zsh-users/zsh-completions kind:fpath path:src
 zsh-users/zsh-history-substring-search
 olets/zsh-abbr
 zsh-users/zsh-syntax-highlighting
+urbainvaes/fzf-marks

antidoteが起動時にこのファイルを読んで自動的にインストール・ロードしてくれるので、追加の手順は不要。シェルを再起動してmarkコマンドが使えることを確認する。

$ cd ~/ghq/github.com/foo/bar
$ mark bar
$ cd ~
# ここで Ctrl-g を押すとマーク一覧が表示され、bar へジャンプできる

Ctrl-gの標準キーバインドとの衝突

fzf-marksのデフォルトのジャンプキーはCtrl-gだが、zshの標準(Emacsキーバインド)ではCtrl-gはsend-break、つまりEmacsで言うところのkeyboard-quit(入力中のコマンドラインの取り消し)に割り当てられている。Emacsキーバインド(bindkey -e)を使用している場合、Ctrl-gは「取り消し」という操作に強く結びついているため、fzf-marksによってジャンプ用に上書きされると既存の操作感と衝突する。

fzf-marksは内部でbindkeyを使ってキーを上書きするため、導入時は既存のキーバインドとバッティングしていないか事前に確認しておくとよい。bindkeyで現在の割り当てを確認できる。

$ bindkey | grep '\^G'
"^G" send-break

対処:ジャンプキーをCtrl-jに変更する

FZF_MARKS_JUMPという環境変数でジャンプキーを変更できるので、antidoteの読み込みより前(.zshrcの先頭付近)で設定した。空いていて指も届きやすいCtrl-j(accept-lineと重複するが、改行を打つ場面が少ないコマンドライン用途では実害がない)を割り当てている。Jumpという意味もあり覚えやすい。

# fzf-marks: C-gはzsh標準でsend-break(Emacsのkeyboard-quitに相当)に
# 割り当てられているため、accept-lineと重複するC-jに変更する
export FZF_MARKS_JUMP='^J'

設定後にシェルを再起動し、Ctrl-gが元のsend-breakのまま動くこと、Ctrl-jでマーク一覧(ウィジェット名はfzm)が開くことを確認する。

$ bindkey | grep -E '\^G|\^J'
"^G" send-break
"^J" fzm

Ctrl-gが変更前と変わらずsend-breakのままで、Ctrl-jにfzf-marksのウィジェットfzmが割り当てられていることがわかる。

まとめ

  • antidoteを使っていればzsh_plugins.txtに1行追加するだけで導入できる
  • デフォルトのCtrl-gはzshのsend-breakと衝突するため、環境によってはFZF_MARKS_JUMPでキーを変更したほうがよい
  • markでよく使うディレクトリを登録しておけば、ワークディレクトリ間の移動が体感でかなり速くなった

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?