🏎️

ターミナルでディレクトリを駆け巡る(fzf, tmux)

2022/06/09に公開

モチベーション

ディレクトリを移動するときのtab連打が辛い

環境

zsh
fd # https://github.com/sharkdp/fd
fzf # https://github.com/junegunn/fzf
tmux
tmux-fzf # https://github.com/sainnhe/tmux-fzf

ディレクトリ編

カレントディレクトリ以下に移動

# .zshrc

function cd_target(){
  d=$( \
    fd --type d -H \
    -E .git \
    -E node_modules \
    -E .terragrunt-cache \
    | fzf )

  if [[ $d = "" ]]; then
    return
  fi

  cd $d
}

zle -N cd_target
bindkey "^k" cd_target

ctrl+kで発動

rootディレクトリに移動

# .zshrc

# 最寄りの.gitがあるディレクトリをrootとする
function cdr() {
  export TMP_CDR_DIR=$(pwd)

  while [[ $TMP_CDR_DIR != "/" ]]
  do
    if [ -e "$TMP_CDR_DIR/.git" ];then
      echo $TMP_CDR_DIR
      cd $TMP_CDR_DIR
      break
    else
      export TMP_CDR_DIR=$( dirname $TMP_CDR_DIR )
    fi
  done
  unset TMP_CDR_DIR
}

tmux編

session移動

# ~/.tmux/bin/tmux-fzf-session
# 確かこれが必要 https://github.com/sainnhe/tmux-fzf

#!/bin/bash

if [ -n "$TMUX" ]; then
  session="$(tmux ls |
    cut -d : -f 1 |
    fzf
  )"

  if [ -n "$session" ]; then
    tmux switch -t $session
  fi
fi

# ~/.tmux.conf
bind w popup -E "$HOME/.tmux/bin/tmux-fzf-session"

人生のキーストロークが半分くらいになった

GitHubで編集を提案

Discussion