fzf를 설치했습니다. 이제 뭘 해야 할까요? (2023)
2 hours ago
1
- 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 설치 스크립트로 설치한 뒤 바로 쓸 수 있는 기능들이 핵심임
기본 단축키가 주는 즉시 효과
-
Ctrl+R: 명령어 기록을 퍼지 검색으로 바꿈
- 대부분의 Linux와 Windows 터미널에서 Ctrl+R은 명령어 역방향 검색을 제공함
- 기본 Ctrl+R은 원하는 명령을 찾으려면 정확한 일치가 필요하고, 한 번에 하나의 미리보기만 보여줘 한 글자만 빗나가도 찾기 어려워짐
- fzf를 설치하면 여러 키보드 단축키가 더 나은 동작으로 덮어써지며, Ctrl+R도 기존 방식보다 크게 개선됨
- apt 같은 패키지 관리자로 설치하면 이 단축키 통합이 제공되지 않을 수 있어, fzf 설치 스크립트를 쓰는 이유가 됨
-
Alt+C: 기억이 흐릿한 디렉터리로 빠르게 이동
- fzf는 Alt+C를 강화된 퍼지 cd 단축키로 바꿔줌
- 디렉터리의 정확한 경로를 기억하지 못하고 대략적인 이름만 기억할 때 빠르게 이동할 수 있음
- 빈 터미널에서 오래 방문하지 않은 저장소나 작업 디렉터리를 찾을 때 유용함
fzf 명령 자체와 셸 조합
-
기본 fzf
- fzf 명령을 그대로 실행하면 현재 디렉터리를 기준으로 상대 파일 경로를 퍼지 검색함
- 단독으로는 파일 위치를 고르는 정도라 활용도가 크지 않음
-
vi $(fzf)
- vi $(fzf)처럼 명령 치환과 조합하면, 퍼지 검색으로 고른 파일을 편집기에서 바로 열 수 있음
- 이 방식은 vi에만 특별한 것이 아니며, emacs, nano, code 등 원하는 편집기와 함께 쓸 수 있음
-
vi $(find . '/' | fzf)
- find . '/' | fzf를 편집기와 조합하면, 위치를 모르는 설정 파일을 전체 경로 후보에서 퍼지 검색해 열 수 있음
- nginx.conf처럼 위치가 기억나지 않는 파일을 찾을 때, FHS 지식을 떠올려 추측하거나 외워두는 대신 find 결과를 fzf에 파이프하면 됨
- conf$처럼 검색하면 conf로 끝나는 줄만 필터링할 수 있음
- find가 많은 Permission denied 오류를 만나면 fzf가 잠시 흔들릴 수 있지만 몇 초 뒤 회복됨
- 이런 몇 초의 지연은 설정 파일을 매우 단순한 방식으로 찾는 편익과의 트레이드오프가 됨
-
vi **<TAB>
- sigmonsays의 Hacker News 댓글에서 나온 기능으로, 단축키 덮어쓰기와 fzf 직접 실행의 중간쯤에 별표 두 개를 쓰는 퍼지 탭 완성이 있음
- vi **<TAB>은 vi $(fzf)와 비슷한 방식으로 파일을 고르는 데 쓸 수 있음
- 실제 명령이 완성된 뒤 Enter를 한 번 더 눌러야 함
- bash와 zsh에서는 잘 동작하지만, fish에서는 동작하지 않는 경우가 있음
- $(fzf)를 명시적으로 호출하는 방식이 더 기억하기 쉽다면 이 기능을 자주 쓰지 않을 수도 있음
파일 이동에도 쓰는 fzf
-
mv $(fzf) $(fzf)
- mv $(fzf) $(fzf)는 무엇을 옮길지와 어디로 옮길지 정확히 기억하지 못하지만, 각각에 대해 매우 구체적인 단서만 기억할 때 쓸 수 있음
- 두 번의 fzf 선택으로 이동할 대상과 목적지를 고르는 방식임
- GitHub README에 GIF를 넣는 작업처럼 파일을 옮겨 배치할 때 자주 손이 갈 수 있음
- 관련 예로 finstem의 interactive mode README가 연결됨
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으로 여는 조합임
- 파일 이름을 기억하지 못하고 내용 일부만 기억할 때 편집기로 바로 이어질 수 있음
-
Homepage
-
Tech blog
- fzf를 설치했습니다. 이제 뭘 해야 할까요? (2023)