에디블로그
Engineer's Field Notes

AI 자동화로 매일
한 편씩 쓰는
엔지니어 운영 노트

Claude Code · 자동화 파이프라인 · 사고 회고까지. 잘 굴러간 기록 + 깨진 흔적도 같이 남깁니다.

사람이 할 수 있는 일은,
AI도 할 수 있어야 합니다.
매일 한 편 쓰면서 검증 중.
— 이번 주 가장 많이 읽힌 글 TOP 3
개발자 도구/터미널 & 환경

[fzf] 터미널 히스토리 검색이 달라지는 퍼지 파인더 활용법

반응형
[fzf] 터미널 히스토리 검색이 달라지는 퍼지 파인더 활용법

개발자 도구 · 터미널 & 환경 · 꿀팁

[fzf] 터미널 히스토리 검색이 달라지는 퍼지 파인더 활용법

셸에 기본으로 있는 CTRL-R 히스토리 검색은 입력한 문자열이 정확히 이어져야만 찾아줍니다. fzf는 이 검색을 퍼지 매칭 방식의 대화형 검색으로 바꿔주는 커맨드라인 필터예요. 설치 후 설정 한 줄이면 히스토리 검색·파일 찾기·디렉토리 이동이 전부 바뀝니다. 셸 통합 설정과 키 바인딩 세 개, 검색 문법, 미리보기 커스터마이징까지 정리했어요.

기본 reverse-i-search를 대체하는 도구예요

fzf는 "범용 커맨드라인 퍼지 파인더"를 표방하는 오픈소스 도구입니다. Go로 작성된 단일 바이너리예요. 표준 입력으로 들어온 목록을 대화형으로 걸러서 선택한 항목을 출력합니다. 파일 목록이든 명령 히스토리든 git 브랜치든, 줄 단위 목록이면 뭐든 검색 대상이 됩니다. GitHub 스타가 8만 개를 넘는, 터미널 도구 중에서는 손꼽히게 널리 쓰이는 프로젝트예요.

가장 체감이 큰 건 히스토리 검색입니다. 셸 기본 reverse-i-search는 입력한 문자가 연속으로 일치해야 하고, 한 번에 하나씩만 거슬러 올라가요. fzf의 CTRL-R은 후보 전체를 목록으로 띄워놓고 몇 글자만 흩어 넣어도 좁혀집니다.

  셸 기본 CTRL-R fzf CTRL-R
매칭 방식 연속 문자열 일치 퍼지 매칭 (문자 순서만 맞으면 됨)
화면 한 줄, 후보 1개씩 후보 목록 전체를 띄우고 실시간 필터
탐색 CTRL-R 반복으로 하나씩 이동 방향키로 목록 이동, 정렬 토글 가능
오타 허용 한 글자라도 다르면 못 찾음 중간 문자가 빠져도 매칭

예를 들어 docker compose 관련 긴 명령을 다시 찾을 때, 기본 검색이면 정확한 구간을 기억해서 쳐야 하지만 fzf에서는 dkcp처럼 띄엄띄엄 쳐도 후보가 올라옵니다.

설치와 셸 통합은 두 줄이면 끝납니다

macOS와 리눅스에서는 패키지 매니저로 설치하는 게 가장 간단해요. Windows도 Chocolatey·Scoop·Winget을 지원합니다.

brew install fzf        # macOS / Linux (Homebrew)
sudo apt install fzf    # Debian / Ubuntu
sudo dnf install fzf    # Fedora
sudo pacman -S fzf      # Arch

설치만 하면 fzf 명령 자체는 동작하지만, 이 글에서 다루는 키 바인딩은 셸 통합을 켜야 활성화됩니다. 쓰는 셸에 맞는 한 줄을 설정 파일에 추가하면 돼요.

# ~/.zshrc
source <(fzf --zsh)

# ~/.bashrc
eval "$(fzf --bash)"

# fish (config.fish)
fzf --fish | source

추가 후 새 셸을 열면 CTRL-R·CTRL-T·ALT-C 세 가지 키 바인딩과 퍼지 자동완성이 같이 켜집니다.

키 바인딩 세 개만 기억하면 됩니다

CTRL-R — 명령 히스토리 검색

기본 reverse-i-search 자리를 그대로 대체합니다. 누르면 히스토리 전체가 목록으로 뜨고 타이핑할 때마다 실시간으로 좁혀져요. 항목을 고르고 Enter를 치면 커맨드라인에 올라옵니다. CTRL-R을 한 번 더 누르면 정렬 기준이 관련성 순과 시간 순 사이에서 토글돼요. 공식 문서 기준으로 TAB 다중 선택도 지원합니다.

CTRL-T — 파일·디렉토리 경로 붙여넣기

현재 디렉토리 아래의 파일과 디렉토리를 검색해서, 선택한 경로를 커서 위치에 붙여넣습니다. vim까지 쳐놓고 CTRL-T로 파일을 고르면 경로 타이핑 없이 명령이 완성돼요. 깊은 디렉토리 구조에서 파일명을 어렴풋이만 기억할 때 특히 쓸모가 있습니다.

ALT-C — 디렉토리로 바로 cd

하위 디렉토리 목록에서 하나를 고르면 그 자리에서 cd가 실행됩니다. cd 치고 TAB 여러 번 눌러 내려가는 과정이 검색 한 번으로 줄어요.

별표 두 개로 자동완성도 퍼지로 바뀝니다

셸 통합에는 퍼지 자동완성이라는 기능이 하나 더 들어 있어요. 명령 뒤에 트리거 시퀀스(기본값 **)를 붙이고 TAB을 누르면 fzf 검색 창이 뜹니다.

vim **<TAB>          # 현재 디렉토리 아래 파일 검색
cd ~/projects/**<TAB> # 특정 경로 아래에서 검색
kill -9 **<TAB>       # 프로세스 목록에서 선택
ssh **<TAB>           # 호스트명 검색

파일 경로만이 아니라 kill의 프로세스 목록, ssh의 호스트명처럼 명령별로 맞는 후보를 띄워주는 점이 포인트입니다. 트리거 문자열은 FZF_COMPLETION_TRIGGER 환경변수로 바꿀 수 있어요.

검색 문법: 공백은 AND, 작은따옴표는 정확 매칭

기본은 퍼지 매칭이지만 몇 가지 연산자를 알면 원하는 항목을 훨씬 빨리 집어낼 수 있습니다.

입력 동작
git add 공백 구분 = AND. 두 단어 다 매칭되는 항목만
'wild 퍼지 없이 wild가 정확히 포함된 항목
^music music으로 시작하는 항목
.mp3$ .mp3로 끝나는 항목
!fire fire를 포함하지 않는 항목
go$ | rb$ OR 연산. go 또는 rb로 끝나는 항목

조합도 됩니다. 히스토리에서 docker는 포함하되 compose는 빼고 싶으면 docker !compose처럼 쓰면 돼요. 공식 문서는 공백이 AND로 해석되는 특성상 두 단어를 붙여 쓰거나 약자로 쓰는 편이 더 효율적이라고 안내합니다.

미리보기와 환경변수로 취향껏 바꿀 수 있어요

--preview 옵션을 주면 선택 중인 항목의 내용을 옆 창에 띄워줍니다. 문법 강조 도구인 bat과 조합하는 구성이 공식 README에 예시로 실려 있어요. 키 바인딩별 옵션은 전용 환경변수로 지정합니다.

# ~/.zshrc
export FZF_DEFAULT_OPTS='--height=40%'
export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix'
export FZF_CTRL_T_OPTS="--preview 'bat -n --color=always {}'"

FZF_DEFAULT_COMMAND를 fd로 바꾸면 .gitignore에 걸린 파일이 검색 대상에서 빠지면서 프로젝트 디렉토리의 node_modules 같은 노이즈가 사라집니다. FZF_CTRL_R_OPTS·FZF_ALT_C_OPTS도 같은 방식으로 키별 동작을 따로 조정할 수 있어요.

주의 --preview 옵션을 FZF_DEFAULT_OPTS에 넣지 말라고 공식 README가 명시하고 있어요. 모든 fzf 호출에 미리보기가 적용되어 파일이 아닌 입력(히스토리·프로세스 목록 등)에서 문제가 생깁니다. 미리보기는 FZF_CTRL_T_OPTS처럼 키별 변수에 넣는 게 안전해요.

미리 알아두면 좋은 함정들

  • macOS에서 ALT-C가 안 눌리는 경우 — 기본 터미널은 Option 키를 Meta로 보내지 않는 설정인 경우가 있어요. Terminal.app이면 프로파일 설정의 "Use Option as Meta Key", iTerm2면 "Left Option key: Esc+"를 켜면 됩니다.
  • 미리보기 예시가 그대로 안 돌 때 — bat과 fd는 fzf에 포함된 게 아니라 별도 도구입니다. brew install bat fd처럼 따로 설치해야 해요.
  • 리눅스 배포판 패키지 버전 — apt 등 배포판 저장소의 fzf는 최신 릴리즈보다 뒤처져 있는 경우가 있습니다. 최신 기능이 필요하면 공식 저장소의 git 설치 방식이 대안이에요.
  • 키 바인딩이 안 먹을 때 — 다른 셸 플러그인이 같은 키를 쓰면 나중에 로드된 쪽이 이깁니다. fzf 통합 라인을 설정 파일에서 플러그인 로드 뒤쪽에 두는 걸 의심해볼 만해요.

터미널에서 보내는 시간이 길수록 회수가 빠른 도구입니다

fzf는 MIT 라이선스 오픈소스로, 2013년부터 개발이 이어져 2026년 7월 기준 0.74.0 버전까지 나와 있습니다. 새로 외울 명령이 있는 게 아니라 이미 쓰던 CTRL-R·TAB의 동작이 좋아지는 방식이라, 도입 비용이 사실상 설정 한 줄이에요.

긴 명령을 자주 재사용하거나, 깊은 디렉토리 구조를 오가거나, ssh 접속 대상이 많은 사람일수록 체감이 클 수밖에 없는 구조입니다. 우선 셸 통합만 켜서 CTRL-R부터 바꿔보고, 손에 익으면 fd 연동과 미리보기로 넓혀가는 순서를 권할 만해요. vim·tmux·git과 엮는 확장 예시도 공식 문서의 Examples 섹션에 정리되어 있습니다.

이 글은 공식 문서와 README를 근거로 한 객관 정리이며, 직접 사용기가 아닙니다. 기능·버전 정보는 2026년 7월 기준입니다.

반응형

📚 같이 보면 좋은

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 일정액의 수수료를 제공받습니다."