diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 090f9d2a..d7ce6479 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -687,18 +687,30 @@ function! s:bufopen(lines) if len(a:lines) < 2 return endif - let b = matchstr(a:lines[1], '\[\zs[0-9]*\ze\]') - if empty(a:lines[0]) && get(g:, 'fzf_buffers_jump') + + let key = a:lines[0] + let buffer_numbers = map(a:lines[1:], {_idx, bufline -> matchstr(bufline, '\[\zs[0-9]*\ze\]')}) + + if key == 'ctrl-d' + execute 'bdelete' join(buffer_numbers, ' ') + return + endif + + let b = buffer_numbers[0] + + if empty(key) && get(g:, 'fzf_buffers_jump') let [t, w] = s:find_open_window(b) if t call s:jump(t, w) return endif endif - let cmd = s:action_for(a:lines[0]) + + let cmd = s:action_for(key) if !empty(cmd) execute 'silent' cmd endif + execute 'buffer' b endfunction @@ -728,13 +740,17 @@ endfunction function! fzf#vim#buffers(...) let [query, args] = (a:0 && type(a:1) == type('')) ? \ [a:1, a:000[1:]] : ['', a:000] + + let expected_keys = 'ctrl-d,' . join(keys(s:default_action), ',') + let ctrl_d_header = ["\t\t:: Press ".s:magenta('CTRL-D', 'Special')." to delete"] let sorted = fzf#vim#_buflisted_sorted() - let header_lines = '--header-lines=' . (bufnr('') == get(sorted, 0, 0) ? 1 : 0) + let header_lines = '--header-lines=' . (bufnr('') == get(sorted, 0, 0) ? 2 : 1) let tabstop = len(sorted) >= 1000 ? 9 : 8 + return s:fzf('buffers', { - \ 'source': map(sorted, 'fzf#vim#_format_buffer(v:val)'), + \ 'source': ctrl_d_header + map(sorted, 'fzf#vim#_format_buffer(v:val)'), \ 'sink*': s:function('s:bufopen'), - \ 'options': ['+m', '-x', '--tiebreak=index', header_lines, '--ansi', '-d', '\t', '--with-nth', '3..', '-n', '2,1..2', '--prompt', 'Buf> ', '--query', query, '--preview-window', '+{2}-/2', '--tabstop', tabstop] + \ 'options': ['+m', '-x', '--tiebreak=index', header_lines, '--ansi', '-d', '\t', '--with-nth', '3..', '-n', '2,1..2', '--prompt', 'Buf> ', '--query', query, '--preview-window', '+{2}-/2', '--tabstop', tabstop, '-m', '--expect', expected_keys] \}, args) endfunction