# HG changeset patch # User Christian Brabandt # Date 1526216407 -7200 # Node ID f6dcc1a8d5846b6904f38a5b40d0df9e40fe5592 # Parent 6789408b611e4024a296db55148007c4fa780432 patch 8.0.1829: MS-Windows: script for vimdiff can't handle ! chars commit https://github.com/vim/vim/commit/12365ce49f671a62a1e647df205c9a020828ee1b Author: Bram Moolenaar Date: Sun May 13 14:45:25 2018 +0200 patch 8.0.1829: MS-Windows: script for vimdiff can't handle ! chars Problem: MS-Windows: script for vimdiff can't handle ! chars. Solution: Escape the ! chars. (Hans Ginzel, closes https://github.com/vim/vim/issues/2896) diff --git a/src/dosinst.c b/src/dosinst.c --- a/src/dosinst.c +++ b/src/dosinst.c @@ -1197,13 +1197,17 @@ install_vimrc(int idx) fprintf(fd, " let opt = '-a --binary '\n"); fprintf(fd, " if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n"); fprintf(fd, " if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif\n"); - /* Use quotes only when needed, they may cause trouble. */ + /* Use quotes only when needed, they may cause trouble. + * Always escape "!". */ fprintf(fd, " let arg1 = v:fname_in\n"); fprintf(fd, " if arg1 =~ ' ' | let arg1 = '\"' . arg1 . '\"' | endif\n"); + fprintf(fd, " let arg1 = substitute(arg1, '!', '\\!', 'g')\n"); fprintf(fd, " let arg2 = v:fname_new\n"); fprintf(fd, " if arg2 =~ ' ' | let arg2 = '\"' . arg2 . '\"' | endif\n"); + fprintf(fd, " let arg2 = substitute(arg2, '!', '\\!', 'g')\n"); fprintf(fd, " let arg3 = v:fname_out\n"); fprintf(fd, " if arg3 =~ ' ' | let arg3 = '\"' . arg3 . '\"' | endif\n"); + fprintf(fd, " let arg3 = substitute(arg3, '!', '\\!', 'g')\n"); /* If the path has a space: When using cmd.exe (Win NT/2000/XP) put * quotes around the diff command and rely on the default value of @@ -1225,6 +1229,7 @@ install_vimrc(int idx) fprintf(fd, " else\n"); fprintf(fd, " let cmd = $VIMRUNTIME . '\\diff'\n"); fprintf(fd, " endif\n"); + fprintf(fd, " let cmd = substitute(cmd, '!', '\\!', 'g')\n"); fprintf(fd, " silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3\n"); fprintf(fd, " if exists('l:shxq_sav')\n"); fprintf(fd, " let &shellxquote=l:shxq_sav\n"); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1829, +/**/ 1828, /**/ 1827,