install.fairie/dotfiles/.vim/plugged/zoxide.vim/autoload/zoxide.vim
Git E2E Dev Test Username 774e7b2439 git subrepo clone https://github.com/nanotee/zoxide.vim.git ./dotfiles/.vim/plugged/zoxide.vim
subrepo:
  subdir:   "dotfiles/.vim/plugged/zoxide.vim"
  merged:   "7add42b04"
upstream:
  origin:   "https://github.com/nanotee/zoxide.vim.git"
  branch:   "master"
  commit:   "7add42b04"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"
2022-10-18 10:37:35 -04:00

74 lines
2.6 KiB
VimL

function! s:build_cmd(cmd, query) abort
return join([get(g:, 'zoxide_executable', 'zoxide')] + map(a:cmd + a:query, 'shellescape(v:val)'), ' ')
endfunction
function! zoxide#exec(cmd, query) abort
let result = systemlist(s:build_cmd(a:cmd, a:query))
if v:shell_error
echohl ErrorMsg | echo join(result, "\n") | echohl None
endif
return result
endfunction
function! s:change_directory(cd_command, directory) abort
try
exe a:cd_command a:directory
catch
echohl ErrorMsg | echomsg v:exception | echohl None
return
endtry
pwd
if get(g:, 'zoxide_update_score', 1) && get(g:, 'zoxide_hook', 'none') !=# 'pwd'
call zoxide#exec(['add'], [getcwd()])
endif
endfunction
function! zoxide#z(cd_command, ...) abort
let query = empty(a:000) ? [$HOME] : a:000
if len(query) == 1 && (query[0] ==# '-' || isdirectory(query[0]))
call s:change_directory(a:cd_command, query[0])
return
endif
let result = zoxide#exec(['query', '--exclude', getcwd()], query)[0]
if !v:shell_error | call s:change_directory(a:cd_command, result) | endif
endfunction
function! zoxide#handle_select_result(cd_command, result) abort
if empty(a:result) | return | endif
let directory = substitute(a:result, '^\s*\d*\s*', '', '')
call s:change_directory(a:cd_command, directory)
endfunction
if has('nvim') && get(g:, 'zoxide_use_select', 0)
function! zoxide#zi(cd_command, bang, ...) abort
call luaeval('require("zoxide-vim").select(_A[1], _A[2])', [
\ zoxide#exec(['query', '--list', '--score'], a:000),
\ a:cd_command,
\ ])
endfunction
else
let s:default_fzf_options = [
\ '--prompt=Zoxide> ',
\ '--no-sort',
\ '--keep-right',
\ '--info=inline',
\ '--layout=reverse',
\ '--select-1',
\ ]
if has('unix')
let s:default_fzf_options += ['--preview=\command -p ls -p {2..}', '--preview-window=down']
endif
function! zoxide#zi(cd_command, bang, ...) abort
if !exists('g:loaded_fzf') | echoerr 'The fzf.vim plugin must be installed' | return | endif
call fzf#run(fzf#wrap('zoxide', {
\ 'source': s:build_cmd(['query', '--list', '--score'], a:000),
\ 'sink': funcref('zoxide#handle_select_result', [a:cd_command]),
\ 'options': get(g:, 'zoxide_fzf_options', s:default_fzf_options),
\ }, a:bang))
endfunction
endif