elsa in mac

터미널에서 무엇인가를 찾고 싶다면 fzf를 사용하자 본문

Mac(OS X)/Asahi Linux

터미널에서 무엇인가를 찾고 싶다면 fzf를 사용하자

elsa in mac 2024. 5. 6. 20:13

 

이번 포스트에서는 terminal 에서 사용하는 여러 CLI 도구 중 단연, 최고의 만족도를 선사하는 fzf(command-line fuzzy finder)의 사용법을 알아 봅니다. 

terminal에서 작업을 하다 보면, 무엇인가를 찾아야 할 일이 많습니다. 
특정파일의 위치, 지난 과거 내가 사용한 명령을 다시 사용하고 싶을 때, 특정 프로세스를 죽이고 싶은 경우, 파일 안에서 특정 단어를 포함한 라인을 찾고 싶은 경우 등등.... 이럻때, fzf를 사용하면 매우 빠르고 쉽게 원하는 결과를 얻을 수 있습니다. 

fzf의 설치는 macOS나 linux에서 package manager를 통해 설치하거나, 직접 소스코드를 다운로드 받아 빌드해서 사용하면 됩니다. 

.zshrc에 추가
우선 fzf를 효과적으로 사용하려면, .zshrc의 제일 마지막에 아래의 내용을 추가해 줍니다. 

# zsh 를 사용하는 경우
eval "$(fzf --zsh)"

# bash를 사용하는 경ㅇ
eval "$(fzf --bash)"

# fish를 사용하는 경우 
fzf --fish | source

저장 후, shell 에서 source ~/.zshrc 또는 source ~/.bashrc 를 해 줘야 합니다. 

 

파일 또는 디렉토리 위치 찾기
특정 디렉토리의 하부로 특정 파일의 위치를 확인하고 싶다면, 아래와 같이 fzf 명령을 한 후, 원하는 파일이나 디렉토리의 검색어를 키인하면 됩니다.  fzf을 빠져 나갈때는 esc 키를 눌러 주면 됩니다. 

 

검색 syntax
검색어의 문법은 다음과 같습니다. 

sbtrkt	sbtrkt에 대한 fuzzy 검색
'wild	정확히 wild를 포함한 것만 검색
^music	music으로 시작하는 경우만 검색
.mp3$	.mp3로 끝나는 경우만 검색
!fire	fire를 포함하면 제외
!^music	music으로 시작하는 경우 제외
!.mp3$	mp3로 끝나는 경우를 제외

.png로 끝나지만, config 와 Pictures를 포함하지 않는 조건 검색

 

원하는 process(들)을 kill 하기 
특정 process를 kill 하기 위해서는 ps 나 top등을 이용하여 특정 프로세스를 찾고, pid를 확인한 후 kill을 해 줍니다. 하지만, fzf을 사용하면 보다 쉽게 할 수 있습니다.  kill 을 키인하고 *(star)를 두번 키인 한후, tab 키를 눌러 줍니다. kill **<tab>  
그러면, 아래와 같이 process 항목들이 나열됩니다. 여기서 검색을 한 후, <Enter>키를 치면 해당 process의 pid를 반환해 줍니다.  검색결과에서 원하는 결과 항목에서 tab을 누르게 되면, 다중 선택을 할 수 있습니다. 

 

**<tab>으로 fzf을 호출한다. 
여기서 중요한 것은 **<tab> 을 하면 fzf 가 호출된다는 점 입니다.  **을 fzf completion trigger라고 부르는데요, 이것은 여러 곳에서 응용이 될 수 있습니다. 예를 들어 cd **<tab>을 하면 현재 위치에서 하위 폴더의 특정 위치로 한번에 이동할 수도 있습니다.  여기서 fzf의 검색 기능의 강력한 기능이 돋보일 수 있는데, 예를 들어, nvim 을 검색하면 nvim이 들어간 하위 디렉토리들의 목록이 나오게 될 것입니다. 여러개가 나올 수 있는데, 한칸을 띄우고 다음 검색어를 넣으면, nvim으로 검색된 결과는 두번째 검색어의 영향으로 그 결과가 보다 좁혀지게 됩니다. 세번째 검색어를 추가한다면 검색결과는 보다 더 좁혀지게 될 것 입니다. 

 

more 대신 fzf을 사용하자.
아주 긴 문서나 결과에서 원하는 것을 찾을 때 보통 |  more를 뒤에 붙여 page로 스크롤하게 하고, 눈으로 찾는 경우가 많습니다. | more 대신에 | fzf를 사용한다면, 눈으로 검색하는 것은 물론 추가적으로 검색어를 활용할 수 있게 됩니다. 

"historey ❘ fzf" 명령을 내린 후 install을 섬색한 경우

검색어에 install 과 pip를 넣는다면, history에서 pip로 install 한 항목들을 확인할 수 있을 것 입니다.  물론 검색어의 순서는 상관 없습니다. 

"sudo dmesg ❘ fzf" 명령을 내린 후, zram 을 검색한 경우

 

그 밖의 활용법
environment 항목에 대한 unset . unalias. export 설정등도 쉽게 할 수 있습니다. 

export **<tab>
unset **<tab>
unalias **<tab>

export **<tab>의 실행 결과 화면

 

소스코드나 image의 preview
파일의 내용이나 image를 preview기능을 통해 확인할 수도 있습니다.  이를 위해서는 아래와 같이 .zshrc 파일에 alias를 정의해 놓으면 쉽게 사용할 수 있습니다. 본인의 경우에는 fzfp로 alias를 해 놨습니다.  image preview는 kitty, iterm2, 그리고 sixel을 지원하는 terminal emulator에서 특별한 설정 없이 곧바로 사용할 수 있습니다. 

alias fzfp="fzf --preview 'fzf-preview.sh {}'"

fzf의 preview 기능

 

fzf completion trigger 변경
기본 trigger는 앞서 언급했듯이 ** 입니다만, shift키를 누르는 것이 번거롭다면, trigger를 변경해서 사용할 수 있습니다.  .zshrc 나 .bashrc 에 다음을 추가해 줍니다. 

export FZF_COMPLETION_TRIGGER='=='

Terminal을 사용하는 분들이라면, 이미 많은 분들이 사용하고 있는 필수 CLI 도구 입니다. 이제 막 터미널 사용을 시작하신 분들이라면, 사용을 적극 추천해 드립니다. 

공유하기 링크
Comments