가장 많이 사용하는 디렉토리를 학습하고 몇 번의 키 입력만으로 이동할 수 있는 스마트한 cd 명령어. 방문 빈도와 최근성을 결합한 “frecency” 알고리즘을 사용합니다.
| 플랫폼 | 명령어 |
|---|
| macOS (Homebrew) | brew install zoxide |
| Ubuntu/Debian | sudo apt install zoxide |
| Arch Linux | sudo pacman -S zoxide |
| Fedora/RHEL | sudo dnf install zoxide |
| Windows (Winget) | winget install ajeetdsouza.zoxide |
| Windows (Scoop) | scoop install zoxide |
| Windows (Chocolatey) | choco install zoxide |
| Cargo (모든 플랫폼) | cargo install zoxide --locked |
| Conda | conda install -c conda-forge zoxide |
| Nix | nix-env -iA nixpkgs.zoxide |
| 설치 스크립트 | curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh |
셸 설정 파일에 적절한 줄 추가:
| 셸 | 설정 파일 | 추가할 명령어 |
|---|
| 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) }) |
| Elvish | ~/.elvish/rc.elv | eval (zoxide init elvish | slurp) |
| Nushell | env.nu | zoxide init nushell | save -f ~/.zoxide.nu |
| Xonsh | ~/.xonshrc | execx($(zoxide init xonsh)) |
| 명령어 | 설명 |
|---|
z foo | ”foo”와 일치하는 최고 순위 디렉토리로 이동 |
z foo bar | ”foo”와 “bar” 모두와 일치하는 디렉토리로 이동 |
z ~/projects | 정확한 경로로 이동 (일반 cd처럼 작동) |
z .. | 한 디렉토리 위로 이동 |
z - | 이전 디렉토리로 돌아가기 |
zi foo | fzf를 사용한 대화형 선택 (여러 일치 항목이 있을 때) |
zi | 모든 추적된 디렉토리에서 대화형 선택 |
zoxide는 키워드로 디렉토리 경로를 일치시킵니다. 전체 경로를 입력할 필요가 없습니다:
# /home/user/projects/my-app을 자주 방문한다면
z my-app # 직접 이동
z proj app # 이것도 작동 (경로의 두 단어 모두 일치)
z app # 가장 자주 사용하는 "app" 디렉토리라면 작동
점수 매기기: 디렉토리는 방문 시 점수를 얻습니다. 최근 방문이 더 높은 점수를 받습니다. 사용하지 않는 디렉토리는 시간이 지남에 따라 감소합니다.
| 명령어 | 설명 |
|---|
zoxide add /path/to/dir | 데이터베이스에 디렉토리 수동 추가 |
zoxide remove /path/to/dir | 데이터베이스에서 디렉토리 제거 |
zoxide edit | $EDITOR에서 데이터베이스 열어 수동 편집 |
zoxide query foo | ”foo”에 대한 최상의 일치 항목 표시 (이동하지 않음) |
zoxide query -l | 데이터베이스의 모든 디렉토리를 점수별로 정렬하여 나열 |
zoxide query -l foo | ”foo”에 대한 모든 일치 항목을 점수와 함께 나열 |
zoxide query -ls foo | 점수별로 정렬된 일치 항목을 점수와 함께 나열 |
zoxide query -i foo | 대화형 선택 모드 |
다른 디렉토리 점퍼에서 마이그레이션? 데이터베이스 가져오기:
| 명령어 | 설명 |
|---|
zoxide import --from=autojump /path/to/db | autojump에서 가져오기 |
zoxide import --from=z /path/to/db | z/z.sh에서 가져오기 |
zoxide import --from=fasd /path/to/db | fasd에서 가져오기 |
가져올 기본 데이터베이스 위치:
- autojump:
~/.local/share/autojump/autojump.txt
- z:
~/.z
- fasd:
~/.fasd
| 변수 | 기본값 | 설명 |
|---|
_ZO_DATA_DIR | 플랫폼별 | 데이터베이스를 저장할 디렉토리 |
_ZO_ECHO | 0 | 탐색하기 전에 일치하는 디렉토리 출력 (활성화하려면 1) |
_ZO_EXCLUDE_DIRS | 없음 | 제외할 디렉토리 (콜론으로 구분된 경로) |
_ZO_FZF_OPTS | 없음 | 대화형 모드에서 fzf에 전달되는 사용자 정의 옵션 |
_ZO_MAXAGE | 10000 | 데이터베이스의 최대 항목 수 |
_ZO_RESOLVE_SYMLINKS | 0 | 경로를 저장하기 전에 심볼릭 링크 해결 (활성화하려면 1) |
| 옵션 | 설명 |
|---|
--cmd j | 명령어 이름을 z에서 j로 변경 (j와 ji 생성) |
--hook prompt | 모든 프롬프트에서 점수 업데이트 (기본값) |
--hook pwd | 디렉토리가 변경될 때만 점수 업데이트 |
--hook none | 점수를 자동으로 업데이트하지 않음 |
--no-cmd | z와 zi 별칭을 생성하지 않음 (__zoxide_z 직접 사용) |
# 예: 'z' 대신 'j' 사용, 디렉토리 변경 시에만 업데이트
eval "$(zoxide init bash --cmd j --hook pwd)"
# 홈 디렉토리와 tmp를 추적에서 제외
export _ZO_EXCLUDE_DIRS="$HOME:/tmp:/private/tmp"
# 사용자 정의 fzf 미리보기 사용
export _ZO_FZF_OPTS="--preview 'eza -la --icons {2..}' --preview-window=right:40%"
# 부분 이름으로 프로젝트 디렉토리로 이동
z myproject
# 여러 키워드로 명확하게
z work api # ~/work/projects/api-server와 일치
# 확실하지 않을 때 대화형 모드
zi deploy # 일치하는 모든 디렉토리와 함께 fzf 열기
# zoxide가 생각하는 최상의 일치 항목 확인
zoxide query deploy
# 모든 추적된 디렉토리와 점수 보기
zoxide query -ls
# 데이터베이스에서 삭제된 디렉토리 정리
zoxide query -l | while read -r line; do
dir=$(echo "$line" | awk '{print $2}')
[ ! -d "$dir" ] && zoxide remove "$dir"
done
zi를 사용하면 zoxide는 대화형 선택을 위해 자동으로 fzf를 사용합니다. 이것이 작동하려면 fzf가 설치되어 있어야 합니다.
zoxide는 탭 자동완성을 제공합니다. 셸 통합 후 z 다음에 Tab을 누르면 일치하는 디렉토리가 제안됩니다.
| 기능 | cd | zoxide (z) |
|---|
| 정확한 경로로 이동 | cd /full/path | z /full/path |
| 부분 일치 | 아니오 | 예 (z proj) |
| Frecency 순위 | 아니오 | 예 |
| 대화형 선택 | 아니오 | 예 (zi) |
| 이전 디렉토리 | cd - | z - |
| 학습 동작 | 아니오 | 사용에서 학습 |
| 데이터베이스 가져오기 | N/A | autojump, z, fasd |
| 문제 | 해결 방법 |
|---|
z 명령어를 찾을 수 없음 | 셸 설정에 셸 통합 줄이 있는지 확인하고 셸 재시작 |
| 일치 항목을 찾을 수 없음 | 먼저 cd로 디렉토리를 방문 — zoxide는 시간이 지남에 따라 학습 |
| 잘못된 디렉토리가 일치됨 | 더 구체적인 키워드 사용: z api 대신 z work api |
| 데이터베이스가 너무 큼 | _ZO_MAXAGE를 낮추거나 zoxide edit를 실행하여 정리 |