[fzf] 터미널 히스토리 검색이 달라지는 퍼지 파인더 활용법
![[fzf] 터미널 히스토리 검색이 달라지는 퍼지 파인더 활용법](https://blog.kakaocdn.net/dna/chl4Hg/dJMcahZsl8U/AAAAAAAAAAAAAAAAAAAAAPVfxe1l0ma8OhEuzHXqtZEItxYBSp8IkHJJCuUuXI50/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1785509999&allow_ip=&allow_referer=&signature=YOPJWD1riHBbpOGOhwhRBNf7ZsA%3D)
개발자 도구 · 터미널 & 환경 · 꿀팁
[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도 같은 방식으로 키별 동작을 따로 조정할 수 있어요.
미리 알아두면 좋은 함정들
- 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월 기준입니다.
'개발자 도구 > 터미널 & 환경' 카테고리의 다른 글
| [zoxide] cd 대신 쓰는 디렉터리 점프 (0) | 2026.08.10 |
|---|---|
| [Starship] 셸이 뭐든 프롬프트를 통일하는 도구 (0) | 2026.07.31 |
| [Bun] Node와 npm을 대체하는 올인원 도구 (0) | 2026.07.01 |
| [tmux] SSH가 끊겨도 작업이 안 죽는 이유 (0) | 2026.06.24 |
| [Warp] 터미널을 블록 단위로 다루는 도구 (0) | 2026.06.15 |
📚 같이 보면 좋은
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 일정액의 수수료를 제공받습니다."