# fzf를 설치했습니다. 이제 뭘 해야 할까요? (2023)

> Clean Markdown view of GeekNews topic #29389. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=29389](https://news.hada.io/topic?id=29389)
- GeekNews Markdown: [https://news.hada.io/topic/29389.md](https://news.hada.io/topic/29389.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-05-11T23:01:53+09:00
- Updated: 2026-05-11T23:01:53+09:00
- Original source: [andrew-quinn.me](https://andrew-quinn.me/fzf/)
- Points: 1
- Comments: 1

## Topic Body

- fzf는 설치 직후 **Ctrl+R** 명령 기록 검색을 퍼지 검색으로 개선함
- **Alt+C**로 정확한 경로 없이 오래된 작업 디렉터리로 빠르게 이동 가능함
- fzf 명령은 **명령 치환**과 결합해 선택한 파일을 vi, emacs, code로 바로 열 수 있음
- find 결과를 fzf에 넘기면 **nginx.conf**처럼 위치를 모르는 설정 파일을 찾기 쉬워짐
- **rg. | fzf**는 파일명 대신 파일 내용 줄을 단서로 원하는 파일을 열게 해줌

---

### `fzf`를 설치한 뒤 바로 얻을 수 있는 가치
- 소프트웨어 엔지니어는 자기 업무를 개선하는 도구를 쉽게 만들 수 있지만, 여러 도구를 옮겨 다니며 깊게 익히지 않으면 시간이 지날수록 비용이 커짐
- 좋은 80/20 휴리스틱은 `cat`, `ls`, `cd`, `grep`, `cut` 같은 오래된 Unix 도구를 먼저 익히는 것이며, 현대적인 시스템 관리 역할에서는 `sed`와 `awk`도 포함됨
- `fzf`는 투자 대비 효과가 즉각적이고 가치가 독특해 이 휴리스틱의 예외로 볼 수 있음
- 표준 Ubuntu 환경에서 [`fzf` 설치 스크립트](https://github.com/junegunn/fzf#using-git)로 설치한 뒤 바로 쓸 수 있는 기능들이 핵심임

### 기본 단축키가 주는 즉시 효과
- ## `Ctrl+R`: 명령어 기록을 퍼지 검색으로 바꿈
  - 대부분의 Linux와 Windows 터미널에서 `Ctrl+R`은 명령어 **역방향 검색**을 제공함
  - 기본 `Ctrl+R`은 원하는 명령을 찾으려면 **정확한 일치**가 필요하고, 한 번에 **하나의 미리보기**만 보여줘 한 글자만 빗나가도 찾기 어려워짐
  - `fzf`를 설치하면 여러 키보드 단축키가 더 나은 동작으로 덮어써지며, `Ctrl+R`도 기존 방식보다 크게 개선됨
  - `apt` 같은 패키지 관리자로 설치하면 이 단축키 통합이 제공되지 않을 수 있어, [`fzf` 설치 스크립트](https://github.com/junegunn/fzf#using-git)를 쓰는 이유가 됨
- ## `Alt+C`: 기억이 흐릿한 디렉터리로 빠르게 이동
  - `fzf`는 `Alt+C`를 강화된 퍼지 `cd` 단축키로 바꿔줌
  - 디렉터리의 정확한 경로를 기억하지 못하고 대략적인 이름만 기억할 때 빠르게 이동할 수 있음
  - 빈 터미널에서 오래 방문하지 않은 저장소나 작업 디렉터리를 찾을 때 유용함

### `fzf` 명령 자체와 셸 조합
- ## 기본 `fzf`
  - `fzf` 명령을 그대로 실행하면 현재 디렉터리를 기준으로 상대 파일 경로를 퍼지 검색함
  - 단독으로는 파일 위치를 고르는 정도라 활용도가 크지 않음
- ## `vi $(fzf)`
  - `vi $(fzf)`처럼 명령 치환과 조합하면, 퍼지 검색으로 고른 파일을 편집기에서 바로 열 수 있음
  - 이 방식은 `vi`에만 특별한 것이 아니며, `emacs`, [`nano`](https://ariadne.space/2021/08/13/gnu-nano-is-my-editor-of-choice/), `code` 등 원하는 편집기와 함께 쓸 수 있음
- ## `vi $(find . '/' | fzf)`
  - `find . '/' | fzf`를 편집기와 조합하면, 위치를 모르는 설정 파일을 전체 경로 후보에서 퍼지 검색해 열 수 있음
  - `nginx.conf`처럼 위치가 기억나지 않는 파일을 찾을 때, FHS 지식을 떠올려 추측하거나 외워두는 대신 `find` 결과를 `fzf`에 파이프하면 됨
  - `conf$`처럼 검색하면 `conf`로 끝나는 줄만 필터링할 수 있음
  - `find`가 많은 `Permission denied` 오류를 만나면 `fzf`가 잠시 흔들릴 수 있지만 몇 초 뒤 회복됨
  - 이런 몇 초의 지연은 설정 파일을 매우 단순한 방식으로 찾는 편익과의 트레이드오프가 됨
- ## `vi **&lt;TAB&gt;`
  - [`sigmonsays`의 Hacker News 댓글](https://news.ycombinator.com/item?id=35249935)에서 나온 기능으로, 단축키 덮어쓰기와 `fzf` 직접 실행의 중간쯤에 **별표 두 개를 쓰는 퍼지 탭 완성**이 있음
  - `vi **&lt;TAB&gt;`은 `vi $(fzf)`와 비슷한 방식으로 파일을 고르는 데 쓸 수 있음
  - 실제 명령이 완성된 뒤 `Enter`를 한 번 더 눌러야 함
  - bash와 zsh에서는 잘 동작하지만, [`fish`](https://fishshell.com/)에서는 동작하지 않는 경우가 있음
  - `$(fzf)`를 명시적으로 호출하는 방식이 더 기억하기 쉽다면 이 기능을 자주 쓰지 않을 수도 있음

### 파일 이동에도 쓰는 `fzf`
- ## `mv $(fzf) $(fzf)`
  - `mv $(fzf) $(fzf)`는 무엇을 옮길지와 어디로 옮길지 정확히 기억하지 못하지만, 각각에 대해 매우 구체적인 단서만 기억할 때 쓸 수 있음
  - 두 번의 `fzf` 선택으로 이동할 대상과 목적지를 고르는 방식임
  - GitHub README에 GIF를 넣는 작업처럼 파일을 옮겨 배치할 때 자주 손이 갈 수 있음
  - 관련 예로 [`finstem`의 interactive mode README](https://github.com/hiAndrewQuinn/finstem#interactive-mode)가 연결됨

### `rg`와 조합해 파일 내용까지 퍼지 검색
- ## `rg`: 재귀 검색이 기본인 빠른 `grep`
  - 아래 조합은 `grep`으로도 가능하지만, `rg` 또는 `ripgrep`은 재귀 검색이 기본이라 이 용도에서 강점이 큼
  - 예제를 따라 하려면 `rg`를 설치해 쓰는 것이 권장됨
- ## `rg . | fzf`
  - `rg .`는 파일들의 각 줄을 검색 결과로 내보내고, 이를 `fzf`로 넘기면 모든 파일의 모든 줄을 퍼지 검색할 수 있음
  - 파일 이름이 아니라 파일 안의 줄 내용을 단서로 찾는 방식이 됨
- ## `rg . | fzf | cut -d ":" -f 1`
  - `rg . | fzf`로 고른 결과에 `cut -d ":" -f 1`을 붙이면 콜론 기준 첫 번째 필드, 즉 파일 위치를 반환할 수 있음
  - 줄 내용을 퍼지 검색한 뒤 해당 줄이 들어 있는 파일 경로만 얻는 조합임
- ## `vim $(rg . | fzf | cut -d ":" -f 1)`
  - `vim $(rg . | fzf | cut -d ":" -f 1)`은 모든 파일의 모든 줄을 퍼지 검색한 뒤, 선택한 줄이 들어 있는 파일을 `vim`으로 여는 조합임
  - 파일 이름을 기억하지 못하고 내용 일부만 기억할 때 편집기로 바로 이어질 수 있음

## Comments



### Comment 57237

- Author: neo
- Created: 2026-05-11T23:01:53+09:00
- Points: 1

###### [Lobste.rs 의견들](https://lobste.rs/s/b6fyzj/so_you_ve_installed_fzf_now_what_2023) 
- 이 글의 **대상 독자**가 딱 나인 듯함. fzf를 설치하고 “천재적이네”라고 생각한 뒤, 정작 쓰는 걸 계속 잊어버렸는데 이제는 쓸지도 모르겠음
  - 핵심은 기존 **셸 설정**, 개인 스크립트, 별칭에 통합하는 것임. fzf를 항상 쓰지만 직접 실행하는 경우는 거의 없음

- 좋은 글일 수는 있지만, “이제 뭘 하지?”에 답하려는 목표라면 **fzf 셸 통합**부터 시작하는 건 오히려 더 좁은 독자층만 상대하는 느낌임  
  bash에서 ctrl-r을 익숙하게 쓰고 있는데, 그걸 바꾸라고 하는 건 요구 수준이 너무 높음. 기본값을 대체하지 않고 같은 동작을 연습하는 방법부터 알려줬으면 함
  - 실제로는 **강화된 기본값**에 가까움. ctrl-r을 대체하게 두는 게 맞고, 핵심 매력의 절반은 손에 익은 동작을 유지하면서 기존 흐름과 거의 같은데 더 풍부한 경험을 얻는 데 있음  
    ctrl-r은 아마 내가 가장 많이 쓰는 명령이고, fzf는 학습 곡선 없이 바로 들어맞는 개선이었음. ctrl-r로 실행되니 fzf 쓰는 걸 잊지도 않게 됨. 다만 나중에는 Fish shell로 옮겼고, 거기서는 같은 동작이 기본으로 제공됨

- 설득됐음. 곧 fzf와 **셸 통합**을 추가할 예정이고, 오늘 하나 배웠음

- 명령에 넣을 파일을 찾을 때는 **`ctrl-t` 단축키**도 쓸 수 있음. 특정 변경에 포함할 파일을 고를 때 `git`과 함께 자주 쓰고, `grep` 출력 결과를 걸러서 찾는 범위를 줄이는 데도 써봤음

- 셸 기록 검색 개선 말고도 `fzf`를 다음 두 **별칭**과 함께 써왔음  
  `alias gbd='git -c color.ui=never branch | fzf | xargs -I {} git branch -D {}'`  
  주로 풀 리퀘스트를 병합한 뒤 삭제할 로컬 브랜치 목록을 고르는 데 씀. 더 나은 방법이 있을 수 있지만 아직 실패한 적은 없음  
  `alias awp='export AWS_PROFILE="$(grep -e "\[\(.*\)\]" ~/.aws/config | sed -e "s/\[//g" | sed -e "s/\]//g" | cut -d " " -f 2 | sort -u | fzf)"'`  
  `~/.aws/config`에 있는 값에 따라 **AWS_PROFILE**을 빠르게 바꿀 수 있게 해줌. 이제 Kubernetes 네임스페이스를 바꾸는 비슷한 별칭도 만들까 생각 중임

- **fzf.vim 플러그인**을 쓰면 vim 안에서 fzf를 사용할 수 있음. 파일 열기뿐 아니라 버퍼, 명령 기록, 파일 내용 등을 퍼지 검색할 수 있음

- fzf의 주된 용도는 선형적인 **Git 커밋 기록**을 훑고 검색해서 최근에 무엇이 바뀌었는지 파악하는 것임  
  내 기본 Git 설정에서 `git fzf`는 이렇게 정의해둠  
  ```conf  
  [alias]  
    # Browse commit history with fzf  
    # Inspired by: https://chrismanbrown.gitlab.io/67.html  
    fzf = "!git log --oneline --color=always --decorate=short $@ | \  
        fzf --ansi --reverse --no-sort \  
          --preview 'git show --color=always {1}' \  
          --preview-window '<50(down)' \  
          --bind 'enter:become(git show {1})' #"  
  ```

- 뭔가 놓치고 있는 것 같음. 뭘 할지 모르는 상태에서 왜 **fzf를 설치**하는지 궁금함

- 최근 관련 글도 있음. 어떤 사용자가 **jj용 파일 선택기**로 fzf를 쓰고 있음  
  https://lobste.rs/s/exlogg/jjj
