From a48a9e806408e917715f733c7ef7b0daa17101cd Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 20 Jun 2016 22:38:01 +0900 Subject: [PATCH] Feed 'a' only when Neovim terminal is used Close #165 and #166 --- autoload/fzf/vim.vim | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 3be2511..a18042f 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 a:lines[0] == 'ctrl-x' + execute cmd + else + call feedkeys(':'.cmd.(a:lines[1] == '!' ? '' : ' ')) + endif endfunction function! s:format_excmd(ex) @@ -752,8 +759,8 @@ 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 ctrl-x --tiebreak=index --header-lines 1 -x --prompt "Commands> " -n2,3,2..3 -d'.s:nbs}, a:000) endfunction " ------------------------------------------------------------------ @@ -1025,8 +1032,8 @@ function! s:complete_insert(lines) let data = call(s:reducer, [a:lines]) execute 'normal!' ((s:eol || empty(chars)) ? '' : 'h').del.(s:eol ? 'a': 'i').data - if has('nvim') - call feedkeys('a') + if mode() =~ 't' + call feedkeys('a', 'n') else execute "normal! \la" endif