zoxide

TL;DR

  • cd 대신 z만 치면 자주 가는 디렉토리로 순식간에 이동한다.
  • 방문 빈도 + 최근 접근 시간을 조합한 frecency 알고리즘으로 목적지를 예측한다.
  • fzf와 연동된 zi 명령어로 인터랙티브하게 디렉토리를 골라 이동할 수 있다.

한 줄 요약

“터미널에서 cd /home/user/projects/my-awesome-project/src 같은 긴 경로를 타이핑하는 고통에서 해방시켜 주는 도구”


왜 zoxide인가?

터미널을 쓰다 보면 매일같이 드나드는 디렉토리가 있다. 프로젝트 폴더, 설정 파일 폴더, 로그 폴더… 매번 cd ~/Documents/code/some-project를 풀 타이핑하거나, 히스토리에서 찾느라 위아래 방향키를 연타하고 있다면, 뭔가 잘못된 거다.

처음엔 그냥 “그런가 보다” 하고 넘겼는데, 어느 날 하루에 같은 경로를 몇 번이나 치고 있는 나 자신을 발견했다. 이건 아니다 싶었다.

아래 이미지처럼 내가 그 동안 사용해온 command의 통계다. 보는바와 같이 ls명령 다음으로 cd명령이 가장 많이 사용됐다. 그 만큼 터미널을 쓸 때 경로이동은 매우 자주 사용하는 작업이다. 비단 이건 나만 그런게 아닐꺼라고 확신한다.

zoxide

그때 알게 된 게 zoxide다. Rust로 작성됐고, zautojump 같은 기존 도구에서 영감을 받아 만들어진 스마트 cd 대체 명령어다. 한 번 써보면 cd로 돌아가기 힘들어진다는 말이 괜히 있는 게 아니다.

다른 도구들과 비교

비슷한 도구가 꽤 많은데, 왜 하필 zoxide냐고 물으면 이렇게 답한다.

도구장점단점
autojump오래된 프로젝트, 레퍼런스 많음Python 기반이라 느림, 유지보수 사실상 중단
z (original)가볍고 심플함기능이 제한적, 포크가 분산돼서 혼란스러움
fasd파일 + 디렉토리 모두 지원복잡하고 유지보수 중단
z.luaLua 기반으로 커스터마이징 풍부설정이 복잡함
zoxideRust 기반으로 빠름, 활발한 유지보수, 멀티 쉘 지원데이터가 쌓여야 제 성능이 남

결론적으로 현재 가장 활발하게 유지보수되고, 빠르고, 멀티 쉘을 잘 지원하는 도구가 zoxide다. autojump나 z 사용자라면 데이터 마이그레이션도 지원한다.


주요 기능

1. frecency 기반 스마트 점프

단순히 “최근에 간 곳"이 아니라, 방문 빈도(frequency)와 최근성(recency)을 조합한 frecency 알고리즘으로 목적지를 정한다. 자주 가고 최근에도 간 디렉토리일수록 점수가 높아진다.

z proj        # "proj"가 포함된 디렉토리 중 점수 1위로 이동
z my proj     # 공백으로 여러 키워드를 조합해서 좁힐 수 있음
zoxide z 명령어 사용 예시

처음엔 데이터가 없어서 좀 답답할 수 있는데, 며칠만 쓰면 금방 학습된다. 이후에는 z proj 두 글자로 /home/user/Documents/code/my-awesome-project까지 날아간다.

2. 인터랙티브 모드 (zi + fzf)

zi 명령어를 쓰면 fzf 인터페이스가 뜨면서 지금까지 방문한 디렉토리 목록을 퍼지 검색으로 고를 수 있다.

zi            # fzf로 디렉토리 선택 후 이동
zi proj       # "proj" 키워드로 필터링된 목록에서 선택
zoxide zi 인터랙티브 모드 스크린샷

fzf가 설치돼 있어야 zi가 제대로 동작한다. 없으면 미리 설치해두자.

# macOS
brew install fzf

# Ubuntu/Debian
sudo apt install fzf

3. 멀티 쉘 지원

bash, zsh, fish는 물론이고 PowerShell, Elvish, Tcsh, Xonsh, Nushell, POSIX 쉘까지 지원한다. 쉘을 뭘 쓰든 상관없다.

4. 기존 데이터 마이그레이션

autojump, z, z.lua를 쓰다가 넘어오더라도 기존 데이터를 가져올 수 있다. 처음부터 다시 쌓지 않아도 된다.

# autojump 데이터 임포트
zoxide import --from autojump ~/.local/share/autojump/autojump.txt

# z 데이터 임포트
zoxide import --from z ~/.z

5. 환경 변수로 커스터마이징

기본 동작이 마음에 안 들면 환경 변수로 조정할 수 있다.

환경 변수설명
_ZO_DATA_DIR데이터 파일 저장 경로
_ZO_ECHO이동 전 경로 출력 여부
_ZO_EXCLUDE_DIRS학습에서 제외할 디렉토리
_ZO_FZF_OPTSfzf 옵션 커스터마이징
_ZO_MAXAGE데이터 최대 보존 점수
_ZO_RESOLVE_SYMLINKS심볼릭 링크 해석 여부

예를 들어 /tmp~/.Trash 같은 곳은 학습 목록에서 빼고 싶다면:

export _ZO_EXCLUDE_DIRS="/tmp:$HOME/.Trash"

설치 및 설정

설치

macOS (Homebrew)

brew install zoxide

Cargo (Rust 있으면 어디서든)

cargo install zoxide --locked

Ubuntu/Debian

sudo apt install zoxide

Fedora/RHEL

sudo dnf install zoxide

Arch Linux

sudo pacman -S zoxide

쉘 초기화 설정

설치만 하면 끝이 아니다. 쉘 설정 파일에 초기화 코드를 추가해야 한다. 이걸 빼먹으면 z 명령어가 작동하지 않는다.

zsh (~/.zshrc에 추가)

eval "$(zoxide init zsh)"

bash (~/.bashrc에 추가)

eval "$(zoxide init bash)"

fish (~/.config/fish/config.fish에 추가)

zoxide init fish | source

PowerShell ($PROFILE에 추가)

Invoke-Expression (& { (zoxide init powershell | Out-String) })

설정 파일 수정 후에는 쉘을 재시작하거나 설정을 다시 불러와야 한다.

# zsh/bash
source ~/.zshrc  # 또는 source ~/.bashrc

# fish
source ~/.config/fish/config.fish

설치가 됐는지 확인하려면:

zoxide --version

실제 사용 후기

처음 이틀 정도는 뭔가 어색하다. 데이터가 없으니 z proj 해봐야 “no match found"가 뜨는 경우도 있고, 습관적으로 cd를 치기도 한다. 그냥 평소처럼 쓰면서 zoxide가 알아서 학습하도록 놔두면 된다.

3일쯤 지나면 슬슬 효과가 보이기 시작한다. 자주 가는 프로젝트 폴더, 설정 파일 디렉토리, 작업 폴더들이 z 두세 글자로 이동된다. 그 순간부터는 진짜 cd로 돌아가기 싫어진다.

개인적으로 가장 많이 쓰는 패턴은 이렇다:

# 프로젝트 폴더 이동 (경로 기억 불필요)
z hugo       # ~/Documents/code/hugo-blog로 이동
z infra      # ~/Documents/code/infra-stuff로 이동

# 뭔가 헷갈릴 때 인터랙티브 모드
zi           # 전체 목록에서 fzf로 선택
zi conf      # "conf" 포함된 목록에서 선택

이 명령이 빛을 바라는 순간은 경로가 무지 길 때, 예를 들면, 경로가 아래 와 같다고 하자

~/Documents/code/my-awesome-project/src/test/components/button/

이럴 때 심플하게 z but 까지만 입력하면 위 경로로 이동한다. 엄청난 시간 절약! 위에 언급한거 처럼 모든 경로를 기억하고 있는 것이 아니라, 자주 가는 경로를 학습하고 있기 때문에 이런 심플한 입력으로 이동할 수 있다.


장단점 정리

구분내용
장점Rust 기반으로 빠른 응답 속도
frecency 알고리즘으로 정확한 예측
fzf와 연동되는 인터랙티브 모드(zi)
멀티 쉘, 멀티 플랫폼 지원
기존 autojump/z 데이터 마이그레이션 가능
활발한 유지보수와 커뮤니티
단점처음 며칠은 데이터가 없어서 효과 미미
fzf 별도 설치 필요 (zi 사용 시)
쉘 초기화 설정을 직접 해줘야 함
방문한 적 없는 경로는 여전히 직접 입력해야 함

이런 분께 추천합니다

  • 터미널에서 매일 비슷한 디렉토리를 오가는 개발자
  • cd 긴 경로 타이핑이 귀찮아진 터미널 헤비 유저
  • autojump나 z를 쓰고 있는데 더 빠르고 관리되는 도구로 갈아타고 싶은 분
  • fzf처럼 인터랙티브한 터미널 도구를 좋아하는 분