# Initialize hook to add new entries to the database. export-env { $env.config = ( $env.config? | default {} | upsert hooks { default {} } | upsert hooks.env_change { default {} } | upsert hooks.env_change.PWD { default [] } ) let __zoxide_hooked = ( $env.config.hooks.env_change.PWD | any { try { get __zoxide_hook } catch { false } } ) if not $__zoxide_hooked { $env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD | append { __zoxide_hook: true, code: {|_, dir| zoxide add -- $dir} }) } } def zoxide_completions [context: string] { let parts = $context | split row " " | skip 1 { options: { sort: false, completion_algorithm: substring, case_sensitive: false, }, completions: (^zoxide query --list --exclude $env.PWD -- ...$parts | lines | first 10) } } # Jump to a directory using only keywords. def --env --wrapped __zoxide_z [...rest: string@zoxide_completions] { let path = match $rest { [] => {'~'}, [ '-' ] => {'-'}, [ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg} _ => { zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n" } } cd $path } # Jump to a directory using interactive search. def --env --wrapped __zoxide_zi [...rest:string] { cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")' } # ============================================================================= alias z = __zoxide_z alias zi = __zoxide_zi