let fish_completer = {|spans| fish --command $'complete "--do-complete=($spans | str join " ")"' | from tsv --flexible --noheaders --no-infer | rename value description | update value { if ($in | path exists) {$'"($in | str replace "\"" "\\\"" )"'} else {$in} } } # This completer will use fish by default let external_completer = {|spans| let expanded_alias = scope aliases | where name == $spans.0 | get -i 0.expansion let spans = if $expanded_alias != null { $spans | skip 1 | prepend ($expanded_alias | split row ' ' | take 1) } else { $spans } match $spans.0 { # use zoxide completions for zoxide commands _ => $fish_completer } | do $in $spans } $env.config.completions.external.completer = $external_completer def "nu-complete zoxide path" [context: string] { let parts = $context | split row " " | skip 1 { options: { sort: false completion_algorithm: prefix positional: false case_sensitive: false } completions: (zoxide query --list --exclude $env.PWD -- ...$parts | lines) } } def --env --wrapped z [...rest: string@"nu-complete zoxide path"] { __zoxide_z ...$rest }