From 6b62cb418a428f91b3d99c1ce7e5bf6d2043779b Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 21 Jun 2016 01:06:56 +0900 Subject: [PATCH] [Commands] CTRL-X to directly execute the command Close #162 --- README.md | 7 ++++++- autoload/fzf/vim.vim | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 42dbeae..096d225 100644 --- a/README.md +++ b/README.md @@ -121,15 +121,20 @@ let g:fzf_colors = #### Command-local options +The right-hand-side values are the default values for the options. + ```vim " [Buffers] Jump to the existing window if possible -let g:fzf_buffers_jump = 1 +let g:fzf_buffers_jump = 0 " [[B]Commits] Customize the options used by 'git log': let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' " [Tags] Command to generate tags file let g:fzf_tags_command = 'ctags -R' + +" [Commands] --expect expression for directly executing the command +let g:fzf_commands_expect = 'ctrl-x' ``` #### Advanced customization using autoload functions diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 7cfa5cb..78228ae 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -709,9 +709,16 @@ function! s:format_cmd(line) \ '\=s:nbs.s:yellow(submatch(1), "Function").s:nbs', '') endfunction -function! s:command_sink(cmd) - let cmd = matchstr(a:cmd, s:nbs.'\zs\S*\ze'.s:nbs) - call feedkeys(':'.cmd.(a:cmd[0] == '!' ? '' : ' ')) +function! s:command_sink(lines) + if len(a:lines) < 2 + return + endif + let cmd = matchstr(a:lines[1], s:nbs.'\zs\S*\ze'.s:nbs) + if empty(a:lines[0]) + call feedkeys(':'.cmd.(a:lines[1][0] == '!' ? '' : ' ')) + else + execute cmd + endif endfunction function! s:format_excmd(ex) @@ -752,8 +759,9 @@ function! fzf#vim#commands(...) let list = split(cout, "\n") return s:fzf({ \ 'source': extend(extend(list[0:0], map(list[1:], 's:format_cmd(v:val)')), s:excmds()), - \ 'sink': s:function('s:command_sink'), - \ 'options': '--ansi --tiebreak=index --header-lines 1 -x --prompt "Commands> " -n2,3,2..3 -d'.s:nbs}, a:000) + \ 'sink*': s:function('s:command_sink'), + \ 'options': '--ansi --expect '.get(g:, 'fzf_commands_expect', 'ctrl-x'). + \ ' --tiebreak=index --header-lines 1 -x --prompt "Commands> " -n2,3,2..3 -d'.s:nbs}, a:000) endfunction " ------------------------------------------------------------------