From 25ea6371b26e7ca1f212e7abe53d7e8cc5f2b42d Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 24 Aug 2017 01:21:52 -0400 Subject: [PATCH 1/3] [s:complete_trigger] use list type for options --- autoload/fzf/vim.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 6b1f47f..f9a5eef 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -1171,7 +1171,7 @@ endfunction function! s:complete_trigger() let opts = copy(s:opts) - let opts.options = printf('+m -q %s %s', shellescape(s:query), get(opts, 'options', '')) + call s:merge_opts(opts, ['+m', '-q', s:query]) let opts['sink*'] = s:function('s:complete_insert') let s:reducer = s:pluck(opts, 'reducer', s:function('s:first_line')) call fzf#run(opts) From b73cec55f00cf1900667c010d847f48331f5c775 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Thu, 24 Aug 2017 21:50:41 -0400 Subject: [PATCH 2/3] [fzf#vim#complete#path] works in Windows --- autoload/fzf/vim.vim | 7 ++++--- autoload/fzf/vim/complete.vim | 12 +++++++----- plugin/fzf.vim | 12 +++++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index f9a5eef..4d069a9 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -1252,12 +1252,13 @@ function! fzf#vim#complete(...) let s:opts = s:eval(s:opts, 'options', s:query) let s:opts = s:eval(s:opts, 'extra_options', s:query) if has_key(s:opts, 'extra_options') - let s:opts.options = - \ join(filter([get(s:opts, 'options', ''), remove(s:opts, 'extra_options')], '!empty(v:val)')) + call s:merge_opts(s:opts, remove(s:opts, 'extra_options')) endif if has_key(s:opts, 'options') " FIXME: fzf currently doesn't have --no-expect option - let s:opts.options = substitute(s:opts.options, '--expect=[^ ]*', '', 'g') + if type(s:opts.options) == s:TYPE.string + let s:opts.options = substitute(s:opts.options, '--expect=[^ ]*', '', 'g') + endif endif call feedkeys("\(-fzf-complete-trigger)") diff --git a/autoload/fzf/vim/complete.vim b/autoload/fzf/vim/complete.vim index 2a0c2b6..03c9b3b 100644 --- a/autoload/fzf/vim/complete.vim +++ b/autoload/fzf/vim/complete.vim @@ -23,6 +23,7 @@ let s:cpo_save = &cpo set cpo&vim +let s:is_win = has('win32') || has('win64') function! s:extend(base, extra) let base = copy(a:base) @@ -58,25 +59,26 @@ endfunction " ---------------------------------------------------------------------------- function! s:file_split_prefix(prefix) let expanded = expand(a:prefix) + let slash = (s:is_win && !&shellslash) ? '\\' : '/' return isdirectory(expanded) ? \ [expanded, - \ substitute(a:prefix, '/*$', '/', ''), + \ substitute(a:prefix, '[/\\]*$', slash, ''), \ ''] : \ [fnamemodify(expanded, ':h'), - \ substitute(fnamemodify(a:prefix, ':h'), '/*$', '/', ''), + \ substitute(fnamemodify(a:prefix, ':h'), '[/\\]*$', slash, ''), \ fnamemodify(expanded, ':t')] endfunction function! s:file_source(prefix) let [dir, head, tail] = s:file_split_prefix(a:prefix) return printf( - \ "cd %s && ".s:file_cmd." | sed 's:^:%s:'", - \ shellescape(dir), empty(a:prefix) || a:prefix == tail ? '' : head) + \ "cd %s && ".s:file_cmd." | sed %s", + \ fzf#shellescape(dir), fzf#shellescape('s:^:'.(empty(a:prefix) || a:prefix == tail ? '' : head).':')) endfunction function! s:file_options(prefix) let [_, head, tail] = s:file_split_prefix(a:prefix) - return printf('--prompt %s --query %s', shellescape(head), shellescape(tail)) + return ['--prompt', head, '--query', tail] endfunction function! s:fname_prefix(str) diff --git a/plugin/fzf.vim b/plugin/fzf.vim index a1281bc..79e3d9d 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -23,6 +23,7 @@ let s:cpo_save = &cpo set cpo&vim +let s:is_win = has('win32') || has('win64') function! s:defs(commands) let prefix = get(g:, 'fzf_command_prefix', '') @@ -123,9 +124,14 @@ augroup fzf_buffers 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:^..::'") -inoremap (fzf-complete-file-ag) fzf#vim#complete#path("ag -l -g ''") +if s:is_win + inoremap (fzf-complete-path) fzf#vim#complete#path('dir /s/b') + inoremap (fzf-complete-file) fzf#vim#complete#path('dir /s/b/a:-d') +else + 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:^..::'") +endif +inoremap (fzf-complete-file-ag) fzf#vim#complete#path('ag -l -g ""') inoremap (fzf-complete-line) fzf#vim#complete#line() inoremap (fzf-complete-buffer-line) fzf#vim#complete#buffer_line() From 34ceec14d2e60b3fe289fa0b126f2b8a0c606b0c Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Fri, 25 Aug 2017 23:34:51 -0400 Subject: [PATCH 3/3] [fzf#vim#complete] append --no-expect to options Reference: https://github.com/junegunn/fzf.vim/pull/436#discussion_r135379047 --- autoload/fzf/vim.vim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 4d069a9..b98171e 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -1255,9 +1255,10 @@ function! fzf#vim#complete(...) call s:merge_opts(s:opts, remove(s:opts, 'extra_options')) endif if has_key(s:opts, 'options') - " FIXME: fzf currently doesn't have --no-expect option - if type(s:opts.options) == s:TYPE.string - let s:opts.options = substitute(s:opts.options, '--expect=[^ ]*', '', 'g') + if type(s:opts.options) == s:TYPE.list + call add(s:opts.options, '--no-expect') + else + let s:opts.options .= ' --no-expect' endif endif