diff --git a/Examples---Vim.md b/Examples---Vim.md new file mode 100644 index 0000000..c289866 --- /dev/null +++ b/Examples---Vim.md @@ -0,0 +1,183 @@ +### `locate` command integration + +```vim +command! -nargs=1 Locate call fzf#run( + \ {'source': 'locate ', 'sink': 'e', 'options': '-m'}) +``` + +`:Locate /` will list every file on the system. So make sure that you're using Go version of fzf which is significantly faster than the old Ruby version. + +### Open files in splits + +```vim +" Open files in horizontal split +nnoremap s :call fzf#run({ +\ 'tmux_height': '40%', +\ 'sink': 'botright split' }) + +" Open files in vertical horizontal split +nnoremap v :call fzf#run({ +\ 'tmux_width': winwidth('.') / 2, +\ 'sink': 'vertical botright split' }) +``` + +### Choose color scheme + +```vim +nnoremap C :call fzf#run({ +\ 'source': +\ map(split(globpath(&rtp, "colors/*.vim"), "\n"), +\ "substitute(fnamemodify(v:val, ':t'), '\\..\\{-}$', '', '')"), +\ 'sink': 'colo', +\ 'options': '+m', +\ 'tmux_width': 20 +\ }) +``` + +### Select buffer + +```vim +function! s:buflist() + redir => ls + silent ls + redir END + return split(ls, '\n') +endfunction + +function! s:bufopen(e) + execute 'buffer' matchstr(a:e, '^[ 0-9]*') +endfunction + +nnoremap :call fzf#run({ +\ 'source': reverse(buflist()), +\ 'sink': function('bufopen'), +\ 'options': '+m', +\ 'tmux_height': '40%' +\ }) +``` + +### Simple MRU search + +```vim +command! FZFMru call fzf#run({ + \'source': v:oldfiles, + \'sink' : 'e ', + \'options' : '-m', + \}) +``` + +### Jump to tags (@atn34) + +```vimL +function! TagCommand() + return substitute('awk _!/^!/ { print \$1 }_ ', '_', "'", 'g') + \ . join(tagfiles(), ' ') +endfunction + +command! FZFTag call fzf#run({ +\ 'source' : TagCommand(), +\ 'sink' : 'tag', +\ }) +``` + +### Search lines in all open vim buffers + +```vimL +function! s:line_handler(l) + let keys = split(a:l, ':\t') + exec 'buf ' . keys[0] + exec keys[1] + normal! ^zz +endfunction + +function! s:buffer_lines() + let res = [] + for b in filter(range(1, bufnr('$')), 'buflisted(v:val)') + call extend(res, map(getbufline(b,0,"$"), 'b . ":\t" . (v:key + 1) . ":\t" . v:val ')) + endfor + return res +endfunction + +command! FZFLines call fzf#run({ +\ 'source': buffer_lines(), +\ 'sink': function('line_handler'), +\ 'options': '--extended --nth=3..', +\ 'tmux_height': '60%' +\}) +``` + +### Narrow ag results within vim + +Add this to your .vimrc + +```vimL +command! -nargs=1 AgFZF call fzf#run({ + \'source': Arghandler(), + \'sink' : function('AgHandler'), + \'options' : '-m' + \}) + +function! AgHandler(l) + let keys = split(a:l,':') + execute 'tabe +' . keys[-2] . ' ' . escape(keys[-1], ' ') +endfunction + +function! Arghandler(l) + return "ag -i " . a:l . " | sed 's@\\(.[^:]*\\):\\(.[^:]*\\):\\(.*\\)@\\3:\\2:\\1@' " +endfunction +``` + +Then use `:AgFZF` followed by an ag-recogizable regex to pipe ag results into fzf for narrowing. Selected results are opened in new tabs so that you can open multiple positions within the same file (perhaps there's a better way of doing this). + + +### Fuzzy cmdline completion + +```vimL +cnoremap eGetCompletions() +"add an extra at the end of this line to automatically accept the fzf-selected completions. + +function! Lister() + call extend(g:FZF_Cmd_Completion_Pre_List,split(getcmdline(),'\(\\\zs\)\@\eLister()\\" + let l:FZF_Cmd_Completion_List = g:FZF_Cmd_Completion_Pre_List[len(l:Prefix):-1] + unlet g:FZF_Cmd_Completion_Pre_List + if len(l:Prefix) > 0 && l:Prefix[0] =~ + \ '^ed\=i\=t\=$\|^spl\=i\=t\=$\|^tabed\=i\=t\=$\|^arged\=i\=t\=$\|^vsp\=l\=i\=t\=$' + "single-argument file commands + return CmdLineDirComplete(l:Prefix, "",l:cmdline_list[-1]) + elseif len(l:Prefix) > 0 && l:Prefix[0] =~ + \ '^arg\=s\=$\|^ne\=x\=t\=$\|^sne\=x\=t\=$\|^argad\=d\=$' + "multi-argument file commands + return CmdLineDirComplete(l:Prefix, '--multi', l:cmdline_list[-1]) + else + return join(l:Prefix + fzf#run({ + \'source':l:FZF_Cmd_Completion_List, + \'options': '--select-1 --query='.shellescape(l:cmdline_list[-1]) + \})) + endif +endfunction +``` + +hit `` while in the ex commandline (i.e. after pressing `:`) to have fzf filter a list of vim's commandline auto-completions. Try `:colo␣` (be sure to include the space) or `:b␣`. There are special cases for handling file-searches, so that you can go deeper into the path than just one directory at a time, and so that you can add multiple files to the arglist at once. More special cases could be added. Some limitations: the auto-complete for `:help` and `:tag` are limited to 300 entries, so you may need to narrow it a bit.