diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index c9c60f2..8d7b3e1 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -402,8 +402,13 @@ function! s:format_buffer(b) return s:strip(printf("[%s] %s\t%s\t%s", s:yellow(a:b), flag, name, extra)) endfunction +function! s:sort_buffers(...) + let [b1, b2] = map(copy(a:000), 'get(g:fzf#vim#buffers, v:val, v:val)') + return b1 - b2 +endfunction + function! fzf#vim#buffers(...) - let bufs = map(s:buflisted(), 's:format_buffer(v:val)') + let bufs = map(sort(s:buflisted(), 's:sort_buffers'), 's:format_buffer(v:val)') return s:fzf(fzf#vim#wrap({ \ 'source': reverse(bufs), \ 'sink*': s:function('s:bufopen'), diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 52176a9..dbde8f8 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -112,6 +112,13 @@ if has('nvim') && get(g:, 'fzf_nvim_statusline', 1) augroup END endif +let g:fzf#vim#buffers = {} +augroup fzf_buffers + autocmd! + autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = localtime() + autocmd BufDelete * silent! call remove(g:fzf#vim#buffers, expand('')) +augroup END + inoremap (fzf-complete-word) fzf#vim#complete#word() inoremap (fzf-complete-path) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -print \| sed '1d;s:^..::'") inoremap (fzf-complete-file) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -type f -print -o -type l -print \| sed 's:^..::'")