diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 4d5952f..bc4c93b 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -163,6 +163,12 @@ function! fzf#vim#with_preview(...) endif if s:is_win let is_wsl_bash = exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$' + if empty($MSWINHOME) + let $MSWINHOME = $HOME + endif + if is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)' + let $WSLENV = 'MSWINHOME/u:'.$WSLENV + endif let preview_cmd = 'bash '.(is_wsl_bash \ ? substitute(substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', ''), '\', '/', 'g') \ : escape(s:bin.preview, '\')) diff --git a/bin/preview.sh b/bin/preview.sh index 3ce7c87..5ea4edc 100755 --- a/bin/preview.sh +++ b/bin/preview.sh @@ -18,7 +18,7 @@ IFS=':' read -r -a INPUT <<< "$1" FILE=${INPUT[0]} CENTER=${INPUT[1]} -if [[ $1 =~ ^[A-Z]:\\ ]]; then +if [[ $1 =~ ^[A-Za-z]:\\ ]]; then FILE=$FILE:${INPUT[1]} CENTER=${INPUT[2]} fi @@ -28,6 +28,20 @@ if [[ -n "$CENTER" && ! "$CENTER" =~ ^[0-9] ]]; then fi CENTER=${CENTER/[^0-9]*/} +# MS Win support +if [[ $FILE =~ '\' ]]; then + if [ -z "$MSWINHOME" ]; then + MSWINHOME="$HOMEDRIVE$HOMEPATH" + fi + if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then + MSWINHOME="${MSWINHOME//\\/\\\\}" + FILE="${FILE/#\~\\/$MSWINHOME\\}" + FILE=$(wslpath -u "$FILE") + elif [ -n "$MSWINHOME" ]; then + FILE="${FILE/#\~\\/$MSWINHOME\\}" + fi +fi + FILE="${FILE/#\~\//$HOME/}" if [ ! -r "$FILE" ]; then echo "File not found ${FILE}"