
fzf を使ったディレクトリの移動と特定のディレクトリ以下をファイル検索するシェルスクリプト
fzf のインストール
fzf にも書いてあるけど一応
clone する
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzfファイルを叩く(確認は全部 y しておけばよい)
~/.fzf/install
ディレクトリの移動
検索するディレクトリの階層指定ができて . から始まる非表示ディレクトリを検索対象に含めるオプションがある。以下を .bashrc にでも書く。
fcd() { local -a MAXDEPTH=() local -a HIDDEN=(-and ! -path '*\/\.*') local -a A=() while (($# > 0)); do case "$1" in -*) [[ "$1" =~ ^-(.*[^a0-9]+.*|)$ ]] && echo "Error: invalid option -- ‘$1‘" && return 1 [[ "$1" =~ ^-[^0-9]*([0-9]|[1-9][0-9]+) ]] && MAXDEPTH=(-maxdepth "${BASH_REMATCH[1]}") [[ "$1" =~ ^-[^-]*a ]] && HIDDEN=() shift continue ;; esac A+=("$1") shift done local v v=$(find "${A[0]:-.}" "${MAXDEPTH[@]}" -type d "${HIDDEN[@]}" -and ! -regex '.*/node_modules/.*' -print 2>/dev/null | fzf --no-multi) [ -d "$v" ] && cd "$v" || return }
リロードして反映
$ source ~/.bashrc検索対象にするディレクトリを指定できる(指定しなければ
.現在のディレクトリ)$ fcd ~/.config階層指定できる
$ fcd -1非表示ディレクトリも検索対象にできる
$ fcd -aオプションとルートディレクトリの指定を混在できる
$ fcd -a3 ~/dev
ファイルの検索
特定のディレクトリ以下を検索してファイルをデフォルトで less コマンドで開く -x するとデフォルトで vim で開く -x=code としたら vscode で開く。以下を .bashrc にでも書く。
ff() { # ~/memo ディレクトリ以下を検索対象にする local ROOT=~/memo/ # デフォルトのコマンド local CMD='less' local QUERY='' while (($# > 0)); do case "$1" in -*) local OPTION VALUE # -x=code とか = で値を渡した場合の分割 IFS='=' read -ra ARRAY <<<"$1" OPTION="${ARRAY[0]}" [ -n "${ARRAY[1]}" ] && VALUE="${ARRAY[1]}" [[ "$OPTION" =~ ^-(.*[^x]+.*|)$ ]] && echo "Error: invalid option -- ‘$1‘" && return 1 if [[ "$OPTION" =~ ^-[^-]*x ]]; then # -x が指定されていれば vim をコマンドとしてセットする CMD='vim' # -x=code みたいな場合にファイルを開くコマンドをセットする [ -n "$VALUE" ] && CMD="$VALUE" fi shift continue ;; esac QUERY="$QUERY $1" shift done local v # 検索対処のディレクトリに ignore とか bin とか node_modules があれば除外 v=$(find "$ROOT" -type f \ -and ! -regex '.*/ignore/.*' \ -and ! -regex '.*/bin/.*' \ -and ! -regex '.*/node_modules/.*' \ -print 2>/dev/null | fzf --query="$QUERY" --no-multi) [ -z "$CMD" ] || ! type "$CMD" > /dev/null 2>&1 && echo "Error: $CMD command not found" && return 1 [ -f "$v" ] && $CMD "$v" || return }
リロードして反映
$ source ~/.bashrc引数を
--queryに渡せる$ ff examplevimでファイルを編集する$ ff -xcodeでファイルを編集する$ ff -x=code