빈도-최신성 알고리즘을 사용하여 사용 습관을 학습하고 셸 전반에서 빠른 디렉토리 탐색을 제공하는 더 스마트한 cd 명령.
| 명령어 | 설명 |
|---|
brew install zoxide | macOS에서 Homebrew로 설치 |
cargo install zoxide --locked | crates.io에서 설치 |
apt install zoxide | Debian/Ubuntu에서 설치 |
pacman -S zoxide | Arch Linux에서 설치 |
dnf install zoxide | Fedora에서 설치 |
scoop install zoxide | Windows에서 Scoop으로 설치 |
winget install ajeetdsouza.zoxide | Windows에서 winget으로 설치 |
nix-env -i zoxide | NixOS에서 설치 |
conda install -c conda-forge zoxide | Conda로 설치 |
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh | 셸 스크립트로 설치 |
| 명령어 | 설명 |
|---|
eval "$(zoxide init bash)" | Bash용 초기화 (.bashrc에 추가) |
eval "$(zoxide init zsh)" | Zsh용 초기화 (.zshrc에 추가) |
zoxide init fish | source | Fish용 초기화 (config.fish에 추가) |
Invoke-Expression (& { (zoxide init powershell) }) | PowerShell용 초기화 |
zoxide init nushell | save -f ~/.zoxide.nu | Nushell용 초기화 |
eval "$(zoxide init elvish)" | Elvish용 초기화 |
eval (zoxide init xonsh) | Xonsh용 초기화 |
# Bash — ~/.bashrc에 추가
eval "$(zoxide init bash)"
# Zsh — ~/.zshrc에 추가
eval "$(zoxide init zsh)"
# Fish — ~/.config/fish/config.fish에 추가
zoxide init fish | source
# PowerShell — $PROFILE에 추가
Invoke-Expression (& { (zoxide init powershell | Out-String) })
# Nushell — env.nu에 추가
zoxide init nushell | save -f ~/.zoxide.nu
source ~/.zoxide.nu
| 명령어 | 설명 |
|---|
z foo | ”foo”와 일치하는 최고 순위 디렉토리로 이동 |
z foo bar | ”foo”와 “bar” 모두 일치하는 디렉토리로 이동 |
z ~/projects | 정확한 경로로 이동 (cd처럼) |
z .. | 상위 디렉토리로 이동 |
z - | 이전 디렉토리로 이동 |
z | 홈 디렉토리로 이동 (인수 없음) |
zi | fzf를 사용한 대화형 선택 |
zi foo | ”foo”로 사전 필터링된 대화형 선택 |
z foo/ | 하위 디렉토리로 이동 (후행 슬래시) |
# 디렉토리를 방문하면 zoxide가 학습합니다
cd ~/projects/myapp # zoxide에 이 경로 학습
cd ~/documents/reports # zoxide에 이 경로 학습
cd /var/log/nginx # zoxide에 이 경로 학습
# 나중에 부분 일치로 이동
z myapp # ~/projects/myapp로 이동
z reports # ~/documents/reports로 이동
z nginx # /var/log/nginx로 이동
# 여러 키워드로 매칭 범위 좁히기
z proj myapp # ~/projects/myapp에 정확히 매칭
z doc rep # ~/documents/reports에 매칭
| 명령어 | 설명 |
|---|
z proj | ”proj”를 포함하는 모든 디렉토리 매칭 |
z proj rust | ”proj”와 “rust” 모두 포함하는 디렉토리 매칭 |
z /home/user/docs | 절대 경로 직접 사용 |
z docs/ | ”docs”라는 하위 디렉토리 매칭 및 우선 |
| 키워드는 경로 구성요소에 매칭 | ”proj”는 /home/user/projects에 매칭 |
| 마지막 키워드는 접두사 매칭 가능 | z pr은 projects에 매칭 |
| 여러 키워드는 AND 매칭 | 모두 경로에 나타나야 함 |
| 매칭은 대소문자 구분 없음 | z PROJ는 projects에 매칭 |
| 개념 | 설명 |
|---|
| 빈도-최신성 = 빈도 + 최신성 | 얼마나 자주, 얼마나 최근에 방문했는지 기반 점수 |
| 최근 방문이 더 높은 점수 | 오늘 방문한 디렉토리가 지난주보다 높은 점수 |
| 자주 방문하는 디렉토리가 더 높은 순위 | 규칙적인 사용이 시간이 지남에 따라 점수 증가 |
| 점수는 시간이 지나면 감소 | 사용하지 않는 디렉토리는 점차 순위 하락 |
| 데이터베이스가 낮은 점수 자동 정리 | 오래되고 사용하지 않는 항목은 자동 제거 |
최대 항목 수는 _ZO_MAXAGE로 제어 | 기본값: 10,000개 항목 |
| 명령어 | 설명 |
|---|
zi | 추적된 모든 디렉토리로 fzf 열기 |
zi query | 쿼리로 사전 필터링된 fzf 열기 |
fzf에서 ↑ / ↓ | 결과 탐색 |
fzf에서 Enter | 디렉토리 선택 및 이동 |
fzf에서 Escape | 선택 취소 |
| fzf에서 입력하여 필터링 | 결과 추가 좁히기 |
fzf가 설치되어 있어야 함 | 대화형 모드를 위해 fzf 설치 |
fzf에서 Tab | 선택 토글 (다중 선택 모드) |
# 추적된 모든 디렉토리로 대화형 퍼지 파인더 열기
zi
# "project"를 포함하는 디렉토리로 사전 필터링
zi project
# fzf의 출력 형식은 점수를 보여줍니다:
# 3.50 /home/user/projects/myapp
# 2.10 /home/user/projects/api
# 1.20 /var/www/project-site
| 명령어 | 설명 |
|---|
eval "$(zoxide init bash --cmd cd)" | Bash에서 cd를 zoxide로 대체 |
eval "$(zoxide init zsh --cmd cd)" | Zsh에서 cd를 zoxide로 대체 |
--cmd cd는 cd 명령을 대체 | cd가 zoxide를 사용 (cd, cdi) |
--cmd j는 j와 ji를 생성 | 사용자 정의 명령 이름 사용 |
기본값으로 z와 zi 생성 | 표준 zoxide 명령 |
| 명령어 | 설명 |
|---|
--hook pwd | 디렉토리 변경 시 데이터베이스 업데이트 (기본값) |
--hook prompt | 모든 프롬프트에서 데이터베이스 업데이트 |
--hook none | 자동 추적 비활성화 |
# Bash에서 cd를 zoxide로 대체
eval "$(zoxide init bash --cmd cd)"
# 이제 'cd'가 zoxide를 사용, 'cdi'가 대화형 모드 열기
# 사용자 정의 명령 이름 사용
eval "$(zoxide init zsh --cmd j)"
# 이제 'j foo'로 이동, 'ji'로 대화형 모드 열기
# fzf와 결합하여 향상된 경험
export _ZO_FZF_OPTS="--height 40% --reverse --border"
| 명령어 | 설명 |
|---|
zoxide query foo | 이동하지 않고 최적 매칭 표시 |
zoxide query foo --list | 점수와 함께 모든 매칭 나열 |
zoxide query foo --score | 빈도-최신성 점수와 함께 매칭 표시 |
zoxide query --all | 전체 데이터베이스 나열 |
zoxide query --all --score | 점수와 함께 데이터베이스 나열 |
zoxide query --exclude /path | 결과에서 특정 경로 제외 |
zoxide query --list | head -20 | 상위 20개 디렉토리 |
| 명령어 | 설명 |
|---|
zoxide add /path/to/dir | 수동으로 디렉토리를 데이터베이스에 추가 |
zoxide remove /path/to/dir | 데이터베이스에서 디렉토리 제거 |
zoxide edit | $EDITOR에서 데이터베이스 열기 (대화형) |
데이터베이스 위치: $_ZO_DATA_DIR/db.zo | 기본 데이터베이스 위치 |
# zoxide가 무엇에 매칭할지 확인
zoxide query project --list --score
# 출력:
# 12.00 /home/user/projects/webapp
# 8.50 /home/user/projects/api
# 3.20 /home/user/old-project
# 새 머신에 대해 수동으로 데이터베이스 시드
zoxide add ~/projects/webapp
zoxide add ~/projects/api
zoxide add ~/.config/nvim
# 오래된 항목 제거 (삭제된 디렉토리)
zoxide query --all | while read -r dir; do
[ -d "$dir" ] || zoxide remove "$dir"
done
# 백업을 위해 데이터베이스 내보내기
zoxide query --all --score > zoxide-backup.txt
| 명령어 | 설명 |
|---|
zoxide import --from z path/to/.z | z.sh 데이터베이스에서 가져오기 |
zoxide import --from autojump path/to/autojump.txt | autojump 데이터베이스에서 가져오기 |
zoxide import --merge --from z path/to/.z | 병합 가져오기 (기존 항목 유지) |
zoxide import --from z --merge ~/.z | 일반적인 z.sh 가져오기 |
# z.sh에서 마이그레이션 (가장 일반적)
zoxide import --from z ~/.z
# autojump에서 마이그레이션
zoxide import --from autojump ~/.local/share/autojump/autojump.txt
# 기존 데이터베이스와 병합 (덮어쓰지 않음)
zoxide import --merge --from z ~/.z
# 가져오기 후 확인
zoxide query --all --score | head -20
| 명령어 | 설명 |
|---|
export _ZO_DATA_DIR="$HOME/.local/share/zoxide" | 데이터베이스 디렉토리 설정 |
export _ZO_ECHO=1 | 이동 전 매칭된 디렉토리 출력 |
export _ZO_EXCLUDE_DIRS="/tmp/*:/private/*" | 추적에서 디렉토리 제외 |
export _ZO_FZF_OPTS="--height 40%" | zi용 사용자 정의 fzf 옵션 |
export _ZO_MAXAGE=10000 | 최대 데이터베이스 항목 설정 |
export _ZO_RESOLVE_SYMLINKS=1 | 저장 전 심볼릭 링크 해석 |
# ~/.bashrc 또는 ~/.zshrc — 전체 zoxide 설정
# 사용자 정의 데이터 디렉토리 설정
export _ZO_DATA_DIR="$HOME/.local/share/zoxide"
# 이동 전 매칭된 디렉토리 출력
export _ZO_ECHO=1
# 임시 및 시스템 디렉토리 제외
export _ZO_EXCLUDE_DIRS="$HOME:$HOME/Downloads:/tmp/*:/private/*"
# 대화형 모드의 fzf 외관 사용자 정의
export _ZO_FZF_OPTS="
--height 40%
--layout reverse
--border rounded
--preview 'ls -la {2..}'
--preview-window right:40%
"
# 정리 전 최대 항목 수 (기본값: 10000)
export _ZO_MAXAGE=10000
# 심볼릭 링크를 정규 경로로 해석
export _ZO_RESOLVE_SYMLINKS=1
# zoxide 초기화 (exports 이후에 실행해야 함)
eval "$(zoxide init zsh)"
| 명령어 | 설명 |
|---|
z <Tab> | 추적된 디렉토리에서 자동완성 |
z foo<Tab> | 일치하는 디렉토리 완성 |
zoxide init을 통한 Bash 자동완성 | 셸 초기화 시 자동 |
zoxide init을 통한 Zsh 자동완성 | 셸 초기화 시 자동 |
zoxide init을 통한 Fish 자동완성 | 셸 초기화 시 자동 |
-
zoxide가 자연스럽게 학습하도록 하기 — 평소처럼 셸을 사용하면 zoxide가 사용 습관에서 데이터베이스를 구축합니다. 모든 디렉토리를 수동으로 시드하려고 하지 마세요.
-
정확도를 위해 두 키워드 사용 — 여러 디렉토리가 매칭되면 두 번째 키워드를 추가하세요: z proj api가 z api 단독보다 더 정확합니다.
-
하위 디렉토리에 후행 슬래시 사용 — z foo/는 “foo”라는 이름의 현재 디렉토리 하위 디렉토리를 우선하고, z foo는 전체 데이터베이스를 검색합니다.
-
최대 학습을 위해 cd 대체 — 모든 디렉토리 변경이 zoxide에 반영되도록 셸 초기화에 --cmd cd를 사용하세요. z를 사용할 때만이 아닙니다.
-
제외 항목 일찍 설정 — 결과를 오염시키는 임시 디렉토리, 빌드 폴더, node_modules 경로를 건너뛰도록 _ZO_EXCLUDE_DIRS를 설정하세요.
-
애매한 이동에 zi 사용 — 어떤 디렉토리가 매칭될지 확실하지 않을 때 zi(대화형)를 사용하여 후보를 미리 보고 선택하세요.
-
기존 데이터 마이그레이션 — z.sh, autojump, 또는 fasd에서 전환할 때 zoxide import로 데이터베이스를 가져와 준비된 캐시로 시작하세요.
-
오래된 항목 정리 — 삭제된 디렉토리의 항목을 주기적으로 zoxide edit 또는 정리 스크립트를 사용하여 제거하여 결과의 관련성을 유지하세요.
-
데이터베이스 백업 — OS 재설치 또는 머신 마이그레이션 전에 zoxide query --all --score로 내보내기하세요.
-
fzf 외관 사용자 정의 — 대화형 선택기에서 디렉토리 내용을 표시하려면 _ZO_FZF_OPTS에 --preview 'ls {2..}'를 설정하세요.