From 7a655179a43cd431862a2bf5d297d9e55fd3f814 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 23 May 2020 08:23:26 -0400 Subject: [PATCH] [fzf#vim#with_preview] Support WSL bash (#1026) * [fzf#vim#with_preview] support wsl bash Close https://github.com/junegunn/fzf.vim/issues/988 Close https://github.com/junegunn/fzf.vim/pull/1009 * [fzf#vim#with_preview] use abs path for bin/ WSL has issues with relative filepaths. --- autoload/fzf/vim.vim | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index e19d8f8..a7a128d 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -30,7 +30,7 @@ set cpo&vim let s:is_win = has('win32') || has('win64') let s:layout_keys = ['window', 'up', 'down', 'left', 'right'] -let s:bin_dir = expand(':h:h:h').'/bin/' +let s:bin_dir = expand(':p:h:h:h').'/bin/' let s:bin = { \ 'preview': s:bin_dir.'preview.sh', \ 'tags': s:bin_dir.'tags.pl' } @@ -41,7 +41,6 @@ if s:is_win else let s:bin.preview = fnamemodify(s:bin.preview, ':8') endif - let s:bin.preview = 'bash '.escape(s:bin.preview, '\') endif let s:wide = 120 @@ -76,6 +75,11 @@ endfunction " [[options to wrap], [preview window expression], [toggle-preview keys...]] function! fzf#vim#with_preview(...) + let bash_path = exepath('bash') + if empty(bash_path) + throw 'bash is not in PATH' + endif + let is_wsl_bash = bash_path =~? 'Windows[/\\]system32[/\\]bash.exe$' " Default options let options = {} let window = '' @@ -104,7 +108,14 @@ function! fzf#vim#with_preview(...) if len(window) let preview += ['--preview-window', window] endif - let preview += ['--preview', (s:is_win ? s:bin.preview : fzf#shellescape(s:bin.preview)).' '.placeholder] + if s:is_win + let preview_cmd = 'bash '.(is_wsl_bash + \ ? substitute(substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', ''), '\', '/', 'g') + \ : escape(s:bin.preview, '\')) + else + let preview_cmd = fzf#shellescape(s:bin.preview) + endif + let preview += ['--preview', preview_cmd.' '.placeholder] if len(args) call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')])