forked from aniani/vim
updated for version 7.3.443
Problem: MS-Windows: 'shcf' and 'shellxquote' defaults are not very good. Solution: Make a better guess when 'shell' is set to "cmd.exe". (Ben Fritz)
This commit is contained in:
39
src/option.c
39
src/option.c
@@ -3883,7 +3883,8 @@ set_init_3()
|
||||
|
||||
#if defined(MSDOS) || defined(WIN3264) || defined(OS2)
|
||||
/*
|
||||
* Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
|
||||
* Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
|
||||
* 'shell' option.
|
||||
* This is done after other initializations, where 'shell' might have been
|
||||
* set, but only if they have not been set before. Default for p_shcf is
|
||||
* "/c", for p_shq is "". For "sh" like shells it is changed here to
|
||||
@@ -3920,6 +3921,42 @@ set_init_3()
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
|
||||
{
|
||||
int idx3;
|
||||
|
||||
/*
|
||||
* cmd.exe on Windows will strip the first and last double quote given
|
||||
* on the command line, e.g. most of the time things like:
|
||||
* cmd /c "my path/to/echo" "my args to echo"
|
||||
* become:
|
||||
* my path/to/echo" "my args to echo
|
||||
* when executed.
|
||||
*
|
||||
* To avoid this, use the /s argument in addition to /c to force the
|
||||
* stripping behavior, and also set shellxquote to automatically
|
||||
* surround the entire command in quotes (which get stripped as
|
||||
* noted).
|
||||
*/
|
||||
|
||||
/* Set shellxquote default to add the quotes to be stripped. */
|
||||
idx3 = findoption((char_u *)"sxq");
|
||||
if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
|
||||
{
|
||||
p_sxq = (char_u *)"\"";
|
||||
options[idx3].def_val[VI_DEFAULT] = p_sxq;
|
||||
}
|
||||
|
||||
/* Set shellcmdflag default to always strip the quotes, note the order
|
||||
* between /s and /c is important or cmd.exe will treat the /s as part
|
||||
* of the command to be executed. */
|
||||
idx3 = findoption((char_u *)"shcf");
|
||||
if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
|
||||
{
|
||||
p_shcf = (char_u *)"/s /c";
|
||||
options[idx3].def_val[VI_DEFAULT] = p_shcf;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_TITLE
|
||||
|
Reference in New Issue
Block a user