From 2069bbc8b54fa77384e42274ee15af7b397af884 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 14 Aug 2017 16:22:07 +0900 Subject: [PATCH] [vim] Allow Funcref in g:fzf_action https://github.com/junegunn/fzf.vim/issues/185 --- README-VIM.md | 13 +++++++++++++ doc/fzf.txt | 15 ++++++++++++++- plugin/fzf.vim | 7 +++++-- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/README-VIM.md b/README-VIM.md index 804400d4..956a46b0 100644 --- a/README-VIM.md +++ b/README-VIM.md @@ -55,6 +55,19 @@ let g:fzf_action = { \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' } +" An action can be a reference to a function that processes selected lines +function! s:build_quickfix_list(lines) + call setqflist(map(copy(a:lines), '{ "filename": v:val }')) + copen + cc +endfunction + +let g:fzf_action = { + \ 'ctrl-q': function('s:build_quickfix_list'), + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit' } + " Default fzf layout " - down / up / left / right let g:fzf_layout = { 'down': '~40%' } diff --git a/doc/fzf.txt b/doc/fzf.txt index 52080ef6..a5239030 100644 --- a/doc/fzf.txt +++ b/doc/fzf.txt @@ -1,4 +1,4 @@ -fzf.txt fzf Last change: April 28 2017 +fzf.txt fzf Last change: August 14 2017 FZF - TABLE OF CONTENTS *fzf* *fzf-toc* ============================================================================== @@ -80,6 +80,19 @@ Examples~ \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' } + " An action can be a reference to a function that processes selected lines + function! s:build_quickfix_list(lines) + call setqflist(map(copy(a:lines), '{ "filename": v:val }')) + copen + cc + endfunction + + let g:fzf_action = { + \ 'ctrl-q': function('s:build_quickfix_list'), + \ 'ctrl-t': 'tab split', + \ 'ctrl-x': 'split', + \ 'ctrl-v': 'vsplit' } + " Default fzf layout " - down / up / left / right let g:fzf_layout = { 'down': '~40%' } diff --git a/plugin/fzf.vim b/plugin/fzf.vim index f8955374..9ce03c03 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -201,7 +201,10 @@ function! s:common_sink(action, lines) abort return endif let key = remove(a:lines, 0) - let cmd = get(a:action, key, 'e') + let Cmd = get(a:action, key, 'e') + if type(Cmd) == type(function('call')) + return Cmd(a:lines) + endif if len(a:lines) > 1 augroup fzf_swap autocmd SwapExists * let v:swapchoice='o' @@ -217,7 +220,7 @@ function! s:common_sink(action, lines) abort execute 'e' s:escape(item) let empty = 0 else - call s:open(cmd, item) + call s:open(Cmd, item) endif if !has('patch-8.0.0177') && !has('nvim-0.2') && exists('#BufEnter') \ && isdirectory(item)