FZF로 ZSH 터미널 더 강력하게 사용하기

Harry The Great
해리의 유목코딩
5 min readJan 5, 2020

이번 포스팅은 정말 쉽고 빠르고 좋은 검색기 FZF를 이용해서 터미널을 더 편하게 사용할 수 있는 방법과 ZSH와 함께 사용할 수 있는 방법에 대해 설명하려 합니다.

FZF

특히 맥에서 다른 기능은 몰라도 파인더는 정말 짜증 납니다. 파일 하나 찾기도 너무 힘들고 느리고 잘 안 나오고.. 이 때문에 평소에 fd와 grep 이용해서 파일을 찾는 편이었는데 우연히 FZF를 접하고 신세계를 체험하였습니다.

FZF는 Fuzzy라는 이름에 맞게 혼돈 속에서 단지 텍스트만 입력해도 자동으로 파일 위치들을 찾아줍니다.

파일의 인덱싱과 동시에 계속해서 결과를 필터링 하기때문에 기다리거나 할 필요 없이 바로바로 검색할 수 있습니다.

설치방법

윈도우를 사용하신다면 링크를 통해 빌드된 바이너리 버전을 다운받으실 수 있습니다.

homebrew 또는 linuxbre

brew install fzf

# To install useful key bindings and fuzzy completion:
$(brew --prefix)/opt/fzf/install

Git을 이용해서

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

사용방법

파이프라인을 이용하는 방법

find * -type f | fzf > selected

find로 출력된 모든 파일 타입이 fzf로 파이프라인을 받아 출력하게됩니다.

직접 인자로 주기

vim $(fzf)

$(fzf) 를 입력하면 바로 fzf 창과함께 파일을 선택할 수 있고 입력한 자리에 원하는 파일path를 줄 수 있습니다.

검색신텍스

모든 텍스트가 일치하지 않고 순서만 맞다면 모든 목록을 출력해줍니다. 만약 결과를 한정하고싶다면 아래와같이 사용할 수 있습니다.

  • 'wild — 정확히 일치하는 파일명
  • ^music — music으로 시작하는 파일명
  • .mp3$ — mp3로 끝나는 파일명
  • !fire — fire를 포함하지 파일명

ZSH와 함께 사용하기

fzf는 zsh 혹은 vim과 사용할 때 정말 강력한데 이번 편에는 Zsh에서 사용하는 방법에 대해 소개하겠습니다. zsh에 대한 설명은 이전 글의 링크로 대신하겠습니다.

설치하기

.zshrc 파일plugins=(
///생략
fzf
///생략
)

#이후 source ~/.zshrc

위에서 fzf를 설치했다면 zshrc파일 plugins 목록에도 선언하여줍니다. ZSH에서 FZF는 아래와 같은 옵션을 제공합니다.

위 옵션을 활용해서 쉽게 단축키를 만들 수 있습니다.

히스토리 가져오기 <Ctrl — T>

zshrc파일에서

Control키와 R키를 누르면 이전에 입력한 히스토리 목록을 보여주고 선택할 수 있습니다.

파일위치 가져오기 <Ctrl-T>

혹시나 검색의 퍼포먼스가 좋지 않다면 find보다 더 빠른 fd를 추천드립니다.

#zshrc 파일
export FZF_DEFAULT_COMMAND=’fd — type f’

FZF의 기본 찾기 커맨드를 fd로 오버라이딩합니다.

vim [커서 위치]

이 단축키는 커서 위치처럼 파일을 명을 인자로 주어야할때 유용하게 쓸 수 있습니다.

alt키를 이용하면 여러개를 선택해서 가져옵니다.

현재 디렉토리 기준으로 이동하기 <Alt-C>

파일 위치 가져오기와 비슷하지만 선택하면 자동으로 cd 명령어가 적용되어 이동합니다. <Alt-C> 키 이지만 Iterm을 사용하신다면 세팅에서 General -> Profile -> Keys에서 options 키를 ECS+로 옵션을 주셔야합니다.

와일드 카드(**)와 함께 사용하기

와일드카드는 사용 가능한 커맨더들을 fuzzy 목록으로 보여줍니다. 예를 들어 ssh ** 를 입력하고 탭을 누른다면 config 파일을 기반으로 연결 가능한 서버 목록을 보여주며 kill -9를 누르고 tab을 누른다면 닫을 프로세스 목록을 입력할 수 있습니다.

ssh **<TAB> => ssh 목록(~/.ssh/config) 보여주기
kill -9 <TAB> => 닫을 프로세스 선택하기
vim ./fzf/**<TAB> => fzf 폴더 내부의 목록만 보여주기
cd ../** => 부모폴더 기준으로 fuzzy 실행하기

마치며

깃헙에서 웬지 개발자분 이름이 한국식 이름이신것같아서 확인해봤는데 역시 한국분이셨습니다(..) 게다가 vim-plug도 개발하신분이라니 정말 좋은 플러그인을 잘 만드시는것같습니다.

--

--

Harry The Great
해리의 유목코딩

Android & IOS Developer 😀 미디움 이외에 스니펫이나 디버그노트로 활용하는 https://www.harrymikoshi.com/ 블로그도 운영하고있습니다.