현재 디렉토리 부하를 fzf + grep (rg)로 증분으로 전문 검색 한 후 vim에서 열기

이제 그런 툴이 절대 있다고 생각해 찾았는데 왠지 발견되지 않았다. (반드시 있음)

grep과 fzf의 조합이라고 재귀적으로 grep한 뒤에 파일명으로 필터링하는 방법은 많이 있었지만, 그렇지 않고 현재 디렉토리 부하의 모든 파일을 fzf를 사용해 증분에 전문 검색하고 싶다.

Laravel을 vendor 포함하여 검색하면 이런 느낌.



코드


#!/bin/bash

grep_cmd="grep --recursive --line-number --invert-match --regexp '^\s*$' * 2>/dev/null"

if type "rg" >/dev/null 2>&1; then
    grep_cmd="rg --hidden --no-ignore --line-number --no-heading --invert-match '^\s*$' 2>/dev/null"
fi

read -r file line <<<"$(eval $grep_cmd | fzf --select-1 --exit-0 | awk -F: '{print $1, $2}')"
( [[ -z "$file" ]] || [[ -z "$line" ]] ) && exit
$EDITOR $file +$line



일단 grep에서도 움직인다고 생각하지만, rg 쪽이 30% 정도 빠르다.
# grepで全文走査
masakuni@mi-air % grep_cmd="grep --recursive --line-number --invert-match --regexp '^\s*$' * 2>/dev/null"
masakuni@mi-air % time (eval $grep_cmd | wc)
  769816 4200126 84045096
( eval $grep_cmd | wc; )  1.91s user 0.42s system 124% cpu 1.874 total

# rgで全文走査
masakuni@mi-air % grep_cmd="rg --hidden --no-ignore --line-number --no-heading --invert-match '^\s*$' 2>/dev/null"
masakuni@mi-air % time (eval $grep_cmd | wc)
  769987 4201356 84059315
( eval $grep_cmd | wc; )  1.33s user 0.79s system 339% cpu 0.624 total

좋은 웹페이지 즐겨찾기