12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fzfのkey bindingまとめてみた

Posted at

:first_quarter_moon_with_face: はじめに

fzf起動中の Ctrl-j 押したら 選択カーソル下移動。とかのキーバインドについてまとめる記事です

junegunn/fzf: A command-line fuzzy finder
man page

fzf-0.22.0

:pencil: 仕組み

manにある通り Key/Evnet(Ctrl-A)に対して、Action(行頭に移動)が設定されている
zshのwidgetみたい

設定可能なKeyに関しては こちら
--bind オプションでKEY:ACTION または EVNET:ACTION形式で記述することでカスタマイズが可能
複数指定の場合はカンマ区切り

fzf --bind=ctrl-j:accept,ctrl-k:kill-line

また ACTION+ で繋げて記述することで、複数のACTIONをチェーンすることができる

:evergreen_tree: Event

Key以外にも Event をバインドすることができる。利用可能なEventとして changebackward-eofがある

change

検索文字(以下query)が変更されるたびにトリガーされる

# queryを変更するたびにtopアクションを実行
fzf --bind change:top

backward-eof

query が空のときに、後方削除を実行しようとしたときにトリガーされる

fzf --bind backward-eof:abort

:musical_keyboard: Key Bindings

デフォルトで割り当てられてるKeyとActionの一覧
おなじみのemacs風キーバインドなので、慣れてる人は読み飛ばし推奨
toggle系に関しては複数選択mode(--multi)時のみ有効

基本操作

Bind Keys Action 説明
Enter (Double-click) accept 選択実行
C trl-c (Ctrl-g Ctrl-q Esc) abort fzfを閉じる
Ctrl-j (Ctrl-n Down) down 選択カーソルを下に移動
Ctrl-k(Ctrl-p Up) up 選択カーソルを上に移動
Ctrl-i (Tab) toggle+down 行をマークして選択カーソルを下に移動
Shift-Tab toggle+up 行をマークして選択カーソルを上に移動

移動

Bind Keys Action 説明
Ctrl-b(Left) backward-char カーソルを左に移動
Ctrl-f(Right) forward-char カーソルを右に移動
Ctrl-a(Home) beginning-of-line カーソルを先頭に移動
Ctrl-e(End) end-of-line カーソルを行末に移動
Alt-b(Shift-left) backward-word カーソルを1単語左へ
Alt-f(Shift-right) forward-word カーソルを1単語右へ移動

削除

Bind Keys Action 説明
Ctrl-h(Bspace) backward-delete-char カーソル前の文字を削除
Ctrl-u unix-line-discard カーソルから行頭までを削除
Ctrl-w unix-word-rubout カーソル前の単語を削除
Ctrl-d delete-char/eof カーソル上の単語を削除
queryが空の場合はfzfを閉じる
Alt-Bspace backward-kill-word カーソル前の単語を削除
Alt-d kill-word カーソル上の文字から単語末尾までを削除
Del delete-char カーソル上の単語を削除

画面操作

Bind Keys Action 説明
Ctrl-l clear-screen 画面をクリアに(これ動いてんのか?)
PgDn page-down 下向きにスクロール
PgUp page-up 上向きにスクロール
Shift-up preview-up プレビュー画面を上にスクロール
Shift-down preview-down プレビュー画面を下にスクロール

:flag_ac: Actionの紹介

デフォで割り当てられてないAction達
色々ありますが、いくつか抜粋してみる

jump, jump-accept

EasyMotionのような選択カーソルの移動ができる
jump.gif

toggle-all

全件選択/全件解除 のtoggle。select-allだと解除したいとき困るよ
toggle-all.gif

execute(...)、 execute-silent(...)

fzfを閉じずに任意のコマンドを実行する。 {} で選択行を引用できる
execute-silenteは画面切り替えなしでコマンドを実行

fzf --bind "enter:execute(less {})"

これで、 「ctrl+vでvimで開く, ctrl+oでopen」 みたいに実行を振り分けたかったけどできない

preview, toggle-preview

--preview で指定したコマンドに加えて、別のプレビューコマンドを指定できる

# デフォルトプレビューウィンドウで ls -lの結果を表示。?でファイル内容を表示
fzf --preview 'ls -l {}' --bind '?:preview:cat {}'

preview.gif
--previewを指定しない場合は プレビューウィンドウが空で表示される

toggle-preview ではプレビューウィンドウの表示/非表示の切替を行う
こっちのほうが使い勝手がいいかも

reload

リストを動的に更新する
manで紹介されているコマンドが中々良さげだった

RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case "
INITIAL_QUERY="foobar"
FZF_DEFAULT_COMMAND="$RG_PREFIX '$INITIAL_QUERY'" \
  fzf --bind "change:reload:$RG_PREFIX {q} || true" \
      --ansi --phony --query "$INITIAL_QUERY"

queryを変更したら都度 rg コマンドが実行される
検索ブラウザのできあがり。検索結果、検索文字のハイライトが動的に更新される

:speech_balloon: ひとこと

この記事では触れてないけど --preview も奥が深めです
独自に関数作ったり、組み込みwedgetをカスタマイズしたとき等 参考になれば幸いです

12
7
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
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?