おでーぶでおでーぶ

いろいろ書く。いろいろ。

フィルターコマンドと組み合わせると幸せになれるコマンド集 その1

fzy, fzf, peco などなど様々なフィルターコマンドがこの世にはあるけれど、結局それで何をすれば DX があがるのか・・・と言われたので、よく使うやつを羅列しました。とりあえずその1ということで。

GitHub - jhawthorn/fzy: A better fuzzy finder

GitHub - junegunn/fzf: A command-line fuzzy finder

GitHub - peco/peco: Simplistic interactive filtering tool

動かしてる環境は zsh 、フィルターは fzf です。適宜変えてください。*1

コマンド履歴を見る

$ alias hist="fzf < ~/.zsh_history"

ghqディレクトリに移動する

$ alias cg='cd $(ghq root)/$(ghq list|fzf)'

git checkout <local> を簡単に

$ git config --global alias.co '!git checkout $(git branch | fzf)'
$ git co

git checkout -b <branch_name> <remote> を簡単に

$ git config --global alias.cor '!f() { local -r ref=$(git branch -r | fzf); git checkout -b "${1:-${ref#*/}}" $ref; }; f'
$ git cor
$ git cor <any_branch_name>

git <command> <file>... を簡単に

$ git config --global alias.staged 'diff --name-only --staged'
$ git config --global alias.modified 'diff --name-only'
$ git config --global alias.untracked 'ls-files --others --exclude-standard'
$ 
$ git config --global alias.add-m '!git add -- $(git modified | fzf -m)'
$ git config --global alias.add-u '!git add -- $(git untracked | fzf -m)'
$ git config --global alias.reset-s '!git reset -- $(git staged | fzf -m)'

特定の拡張子のファイルを探索したい

# ~/.zshrc

find_xxx_seed() {
  local -r ext="$1"
  echo "alias find_${ext}='find . -name \"*.${ext}\"|fzf -m'"
}

eval $(find_xxx_seed "apk")
eval $(find_xxx_seed "ipa")

# find_apk, find_ipa が有効になる

現在のワーキングディレクトリ化にある特定のディレクトリにいきたい

$ alias dive='cd $(find . -type d | fzf)'

他の用途には enhancd を使っています。また上の alias で「あ、この下にないんだった」と思ってキャンセルがてらCtrl+Cを押すと cd 無引数扱いになって履歴に移れるので重宝してます。(enhancd を使ってる場合に限る)

$ alias dive='f() { local -r go_to="$(find . -type d | fzf)"; if [[ -n "$go_to" ]]; then cd "$go_to"; fi; }; f'

Ctrl-C をしたら何もしてほしくないときは多分こう。

*1:ファイル数が多すぎるとパフォーマンスに支障が出ます。