From 71cc4c5037090fbfde5e1ecc42767afbed91d5b2 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sun, 20 Aug 2017 22:42:45 -0400 Subject: [PATCH] Run preview script in batchfile for Windows Bypasses the following issues in Windows: 1. Neovim does not support 8.3 filenames ie. fnamemodify(path, ':8') 2. fzf binary cannot parse output of fzf#shellescape It assumes that preview command is run in sh, not cmd.exe --- autoload/fzf/vim.vim | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index cc6f4d1..7abd64f 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -35,15 +35,6 @@ let s:bin = { \ 'preview': s:bin_dir.(executable('ruby') ? 'preview.rb' : 'preview.sh'), \ 'tags': s:bin_dir.'tags.pl' } let s:TYPE = {'dict': type({}), 'funcref': type(function('call')), 'string': type(''), 'list': type([])} -if s:is_win - if &shellslash - let s:bin.preview = fnamemodify(s:bin.preview, ':8') - else - set shellslash - let s:bin.preview = fnamemodify(s:bin.preview, ':8') - set noshellslash - endif -endif function! s:merge_opts(dict, eopts) if empty(a:eopts) @@ -83,7 +74,17 @@ function! fzf#vim#with_preview(...) call remove(args, 0) endif - let preview = ['--preview-window', window, '--preview', s:bin.preview.' '.(window =~ 'up\|down' ? '-v' : '').' {}'] + if s:is_win + if exists('s:preview_script') + silent! call delete(s:preview_script) + endif + let s:preview_script = tempname().'.bat' + call writefile(['@echo off', fzf#shellescape(s:bin.preview).' %*'], s:preview_script) + let script = s:preview_script + else + let script = s:bin.preview + endif + let preview = ['--preview-window', window, '--preview', script.(window =~ 'up\|down' ? ' -v ' : ' ').'{}'] if len(args) call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')])