diff options
Diffstat (limited to '.vim/autoload/fuzz.vim')
| -rw-r--r-- | .vim/autoload/fuzz.vim | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/.vim/autoload/fuzz.vim b/.vim/autoload/fuzz.vim deleted file mode 100644 index 39d02f1..0000000 --- a/.vim/autoload/fuzz.vim +++ /dev/null @@ -1,140 +0,0 @@ -function! s:prompt(str) - return a:str . g:fuzz_prompt . ' ' -endfunction - -function! s:fuzz(name, opts) - " call skim#run(skim#wrap(a:name, a:opts, 0)) - call fzf#run(fzf#wrap(a:name, a:opts, 0)) -endfunction - -function! s:strip(str) - return substitute(a:str, '^\s*\|\s*$', '', 'g') -endfunction - -function! s:open(cmd, target) - if stridx('edit', a:cmd) == 0 && fnamemodify(a:target, ':p') ==# expand('%:p') - return - endif - execute a:cmd fnameescape(a:target) -endfunction - - -" rg {{{ -function s:map_rg_output(line) - let parts = split(a:line, ':') - return {'filename': &acd ? fnamemodify(parts[0], ':p') : parts[0], 'lnum': parts[1], 'text': join(parts[2:], ':')} -endfunction - -function s:rg_handler(lines) - if len(a:lines) < 1 - return - endif - let first = map(filter(a:lines, 'len(v:val)'), 's:map_rg_output(v:val)')[0] - call s:open('edit', first.filename) - execute first.lnum - normal! zz -endfunction - -function s:rg(prompt, ...) - if !executable('rg') - echoerr 'rg not found' - return - endif - if len(a:000) < 1 || len(a:000[0]) < 1 - echoerr 'no arguments' - return - endif - - call s:fuzz(!empty(a:prompt) ? tolower(a:prompt) : 'rg', { - \ 'source': 'rg --line-number --no-heading --color=always --smart-case '.join(a:000[0], ' '), - \ 'sink*': function('s:rg_handler'), - \ 'options': ['--prompt', s:prompt(!empty(a:prompt) ? a:prompt : 'Rg'), - \ '--ansi', '--multi'] - \ }) -endfunction - -function! fuzz#rg(args) abort - call s:rg('', a:args) -endfunction -" }}} - -" files {{{ -function! fuzz#files() abort - call s:fuzz('files', { - \ 'options': ['--prompt', s:prompt('Fs')] - \ }) -endfunction -" }}} - -" buffers {{{ -function! s:buffers_list() - function! s:buflisted() - return filter(range(1, bufnr('$')), 'buflisted(v:val) && getbufvar(v:val, "&filetype") != "qf"') - endfunction - - function! s:format_buffer(b) - let name = bufname(a:b) - let name = empty(name) ? '[No Name]' : fnamemodify(name, ":p:~:.") - let flag = a:b == bufnr('') ? '%' : - \ (a:b == bufnr('#') ? '#' : ' ') - let modified = getbufvar(a:b, '&modified') ? ' [+]' : '' - let readonly = getbufvar(a:b, '&modifiable') ? '' : ' [RO]' - let extra = join(filter([modified, readonly], '!empty(v:val)'), '') - return s:strip(printf("[%s] %s\t%s\t%s", a:b, flag, name, extra)) - endfunction - - return map(sort(s:buflisted()), 's:format_buffer(v:val)') -endfunction - -function! s:buffers_handler(lines) - if len(a:lines) < 1 - return - endif - let b = matchstr(a:lines[0], '\[\zs[0-9]*\ze\]') - execute 'buffer' b -endfunction - -function! fuzz#buffers() abort - call s:fuzz('buffers', { - \ 'source': s:buffers_list(), - \ 'sink*': function('s:buffers_handler'), - \ 'options': ['--prompt', s:prompt('Buf')] - \ }) -endfunction -" }}} - -" commands {{{ -function! s:command_handler(lines) - if len(a:lines) < 1 - return - endif - call feedkeys(':'.a:lines[0]) -endfunction - -function! fuzz#commands() abort - call s:fuzz('commands', { - \ 'source': sort(getcompletion('', 'command')), - \ 'sink*': function('s:command_handler'), - \ 'options': ['--prompt', s:prompt('Cmd')] - \ }) -endfunction -" }}} - -function! fuzz#cmdoptions(...) abort - let opts = sort(['files', 'buffers', 'commands', 'rg']) - return join(opts, "\n") -endfunction - -function! fuzz#exec(cmd, ...) abort - if a:cmd == 'files' - call fuzz#files() - elseif a:cmd == 'buffers' - call fuzz#buffers() - elseif a:cmd == 'commands' - call fuzz#commands() - elseif a:cmd == 'rg' - call fuzz#rg(a:000) - else - echoerr 'Unknown command ' . a:cmd - endif -endfunction |