본문 바로가기
C.W.K.
Stream
Lesson 02 of 08 · published

fzf: 퍼지 파인더 마법

~13 min · fzf, fuzzy, history

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

대화형 줄 선택기

fzf는 표준 입력으로 받은 줄 목록을 대화형 화면에서 좁힌 뒤 고른 줄을 표준 출력으로 보내. 히스토리, 파일, 브랜치, 프로세스처럼 후보 가운데 하나를 고르는 작업에 같은 조작 방식을 붙일 수 있어.

설치와 셸 통합

brew install fzf
$(brew --prefix)/opt/fzf/install

통합 방법과 키 바인딩은 fzf 버전과 설치 방식에 따라 달라질 수 있어. 설치한 버전의 문서를 따르고 실제로 어느 구성 요소가 키를 소유하는지 확인해.

  • Ctrl+R: 입력한 일부 문자열로 히스토리를 좁혀.
  • Ctrl+T: 파일 후보를 골라 현재 명령줄에 경로를 넣어.
  • Alt+C: 하위 디렉터리 후보를 골라 이동해.

독립 실행 예시

# 프로세스를 고른 뒤 소유자와 명령줄을 확인
pid=$(ps -axo pid=,command= | fzf | awk '{print $1}')
ps -p "$pid" -o pid=,ppid=,user=,command=

# 로컬 브랜치를 고른 뒤 현대 Git 명령으로 전환
branch=$(git for-each-ref --format='%(refname:short)' refs/heads | fzf)
[[ -n "$branch" ]] && git switch "$branch"

# 일반 파일을 고른 뒤 편집기로 열기
file=$(fd --type f | fzf)
[[ -n "$file" ]] && "$EDITOR" -- "$file"

표시와 후보 명령 조정

export FZF_DEFAULT_OPTS="--height 40% --reverse --border --info=inline"
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

화면 배치와 후보 생성 명령은 따로 조정할 수 있어. 숨은 파일을 넣거나 제외 규칙을 바꾸면 선택 범위도 바뀌므로 편의 설정을 권한 경계처럼 검토해.

전체 이름을 외우지 않아도 돼

이름의 일부만 입력해 후보를 좁힐 수 있어서 긴 경로와 브랜치 이름을 매번 완성할 필요가 없어. 퍼지 검색과 방향키, Enter를 같은 조작 감각으로 익히면 대화형 선택이 빨라져.

선택기와 실행기를 분리해

fzf는 텍스트를 고를 뿐 그 항목의 소유권이나 상태를 판단하지 않아. 취소했을 때 나온 빈 값과 파싱 결과를 검사하고, 삭제·종료·브랜치 전환 전에 해석된 대상을 다시 보여 줘. 프로세스 제어는 SIGKILL이 아니라 소유자 확인과 정상 종료 요청에서 시작해야 해.

줄 하나가 언제나 값 하나인 것은 아니야

일반 Unix 파일명에는 줄바꿈이 들어갈 수 있어서 줄 단위 파이프는 보편적인 경로 프로토콜이 아니야. 임의의 파일명을 손실 없이 다뤄야 한다면 NUL 구분을 지원하는 생산자와 소비자를 연결하거나 입력 집합을 명시적으로 제한하고 검증해.

선택은 실행 허가가 아니야

후보를 줄이는 단계와 상태를 바꾸는 단계를 분리하면 취소, 파싱, 권한 확인이 눈에 보여. 선택 결과를 변수에 담은 뒤 비어 있지 않은지 확인하고, 정확한 대상과 실행할 명령을 한 번 더 출력한 다음에만 변경을 수행해.

Code

fzf 셸 통합 설정·bash
brew install fzf
$(brew --prefix)/opt/fzf/install
# 재시작한 뒤 Ctrl+R, Ctrl+T와 Alt+C 시험

External links

Exercise

fzf를 설치한 뒤 현재 버전의 공식 셸 integration 안내에 따라 zsh에 연결해. Ctrl+R과 파일 선택을 시험하고, 브랜치 목록은 먼저 화면에 출력한 뒤 fzf로 하나를 고르는 단계까지만 연습해. 선택 결과를 바로 전환 명령에 넘기기 전에 빈 값과 현재 브랜치를 어떻게 처리할지 생각해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.