index

fzf

fzf는 “fuzzy finder”의 약자로 파일, 명령어 히스토리, 프로세스, git 커밋 메시지, 디렉토리 등 터미널에서 다루는 온갖 리스트를 빠르게 검색하고 선택할 수 있게 해준다

주요 특징

fzf 없이 터미널에서 검색하고 선택하려면 아래와 같이 기본 쉘 도구와 명령어를 조합해서 비슷한 기능을 구현할 수 있다 (대신 퍼지 매칭, TUI 따위는 없음)

installation

installation

# fzf 설치
$ brew install fzf


# fzf 키 바인딩 및 fuzzy 자동완성 설정 (~/.zshrc)
$ source <(fzf --zsh)

environment variables

fzf theme generator

FZF_DEFAULT_COMMAND

# fd를 사용해서 파일을 검색(숨김 파일 및 .git 디렉토리 제외)
$ export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'

FZF_DEFAULT_OPTS

# --preview "cat {}": 선택한 항목을 오른쪽에 cat으로 미리보기
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --preview "cat {}"'

FZF_DEFALUT_OPTS_FILE

export FZF_DEFAULT_OPTS_FILE=~/.fzfrc

키 바인딩 전용 옵션 및 명령 커스텀 환경 변수

.fzfrc

--tmux right,50%
--border
--multi
--preview 'cat --style=numbers --color=always {}'
--bind 'ctrl-y:execute(echo {} | pbcopy)+abort'
--bind 'ctrl-d:preview-page-down'
--bind 'ctrl-u:preview-page-up'
--bind 'ctrl-a:select-all'
--bind 'ctrl-x:deselect-all'

finder

finder shortcut

키 바인딩 단축키

CTRL-K: 커서 위로 이동

CTRL-J: 커서 아래로 이동

Enter: 아이템 선택

CTRL-C CTRL-G ESC: finder 종료

마우스 스크롤, 클릭, 더블 클릭 지원

finder display mode

옵션을 통해 finder 표시 형식을 지정할 수 있다

--height mode

--layout --border

--tmux mode

search syntax

별다른 옵션을 지정하지 않고 fzf를 시작하면 extended-search mode로 동작한다

이 모드는 여러 검색어를 공백으로 구분하여 검색할 수 있다

fzf github 참고

Token Match type Description  
sbtrkt fuzzy-match Items that match sbtrkt  
‘wild exact-match (quoted) Items that include wild  
‘wild’ exact-boundary-match (quoted both ends) Items that include wild at word boundaries
^music prefix-exact-match Items that start with music  
.mp3$ suffix-exact-match Items that end with .mp3  
!fire inverse-exact-match Items that do not include fire  
!^music inverse-prefix-exact-match Items that do not start with music    
!.mp3$ inverse-suffix-exact-match Items that do not end with .mp3  

|: or 연산자로 동작한다

# core로 시작하면서 go, rb, py로 끝나는 엔트리 매칭
$ ^core go$ | rb$ | py$

fuzzy completion

퍼지 자동완성 기능은 fzf를 사용하여 특정 디렉토리나 파일을 선택하고 바로 명령을 실행한다

형식: COMMAND [DIRECTORY/][FUZZY_PATTERN]**<TAB>

# 현재 디렉토리를 기준으로 퍼지 검색을 하고 vim으로 연다
$ vim **<TAB>

# 현재 디렉토리를 기준으로 퍼지 검색을 하고 경로를 이동한다
cd **<TAB>

usage

# fzf 명령은 현재 디렉토리 하위에 있는 모든 파일 시스템을 조회한다
# 명령 치환을 통해 선택한 파일을 vim으로 연다
vim $(fzf)