diff --git a/README.md b/README.md index d65345f..0e2d02c 100644 --- a/README.md +++ b/README.md @@ -140,8 +140,14 @@ Usage as Vim plugin If you install fzf as a Vim plugin, `:FZF` command will be added. ```vim +" Look for files under current directory :FZF -:FZF --no-sort -m + +" Look for files under your home directory +:FZF ~ + +" With options +:FZF --no-sort -m /tmp ``` You can override the source command which produces input to fzf. diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 206f571..69ca19b 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -23,25 +23,37 @@ let s:exec = expand(':h:h').'/fzf' -function! fzf#run(command, args) +function! s:escape(path) + return substitute(a:path, ' ', '\\ ', 'g') +endfunction + +function! fzf#run(command, ...) + let cwd = getcwd() try + let args = copy(a:000) + if len(args) > 0 + let dir = remove(args, -1) + execute 'chdir '.s:escape(dir) + endif + let argstr = join(args) let tf = tempname() let prefix = exists('g:fzf_source') ? g:fzf_source.'|' : '' let fzf = executable(s:exec) ? s:exec : 'fzf' - let options = empty(a:args) ? get(g:, 'fzf_options', '') : a:args + let options = empty(argstr) ? get(g:, 'fzf_options', '') : argstr execute "silent !".prefix.fzf.' '.options." > ".tf if !v:shell_error for line in readfile(tf) if !empty(line) - execute a:command.' '.line + execute a:command.' '.s:escape(line) endif endfor endif finally + execute 'chdir '.s:escape(cwd) redraw! silent! call delete(tf) endtry endfunction -command! -nargs=* FZF call fzf#run('silent e', ) +command! -nargs=* -complete=dir FZF call fzf#run('silent e', )