Mercurial > vim
diff src/ex_docmd.c @ 1098:5a1d8468d1fa v7.0.224
updated for version 7.0-224
author | vimboss |
---|---|
date | Tue, 27 Mar 2007 14:57:09 +0000 |
parents | 9a3b65713280 |
children | 1df41c98fc2e |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -4176,6 +4176,7 @@ expand_filename(eap, cmdlinep, errormsgp int srclen; char_u *p; int n; + int escaped; #ifdef FEAT_QUICKFIX /* Skip a regexp pattern for ":vimgrep[add] pat file..." */ @@ -4216,7 +4217,8 @@ expand_filename(eap, cmdlinep, errormsgp /* * Try to find a match at this position. */ - repl = eval_vars(p, &srclen, &(eap->do_ecmd_lnum), errormsgp, eap->arg); + repl = eval_vars(p, eap->arg, &srclen, &(eap->do_ecmd_lnum), + errormsgp, &escaped); if (*errormsgp != NULL) /* error detected */ return FAIL; if (repl == NULL) /* no match found */ @@ -4235,11 +4237,15 @@ expand_filename(eap, cmdlinep, errormsgp vim_free(l); } - /* Need to escape white space et al. with a backslash. Don't do this - * for shell commands (may have to use quotes instead). Don't do this - * for non-unix systems when there is a single argument (spaces don't - * separate arguments then). */ + /* Need to escape white space et al. with a backslash. + * Don't do this for: + * - replacement that already has been escaped: "##" + * - shell commands (may have to use quotes instead). + * - non-unix systems when there is a single argument (spaces don't + * separate arguments then). + */ if (!eap->usefilter + && !escaped && eap->cmdidx != CMD_bang && eap->cmdidx != CMD_make && eap->cmdidx != CMD_lmake @@ -9280,12 +9286,14 @@ ex_tag_cmd(eap, name) * number of characters to skip. */ char_u * -eval_vars(src, usedlen, lnump, errormsg, srcstart) +eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped) char_u *src; /* pointer into commandline */ + char_u *srcstart; /* beginning of valid memory for src */ int *usedlen; /* characters after src that are used */ linenr_T *lnump; /* line number for :e command, or NULL */ char_u **errormsg; /* pointer to error message */ - char_u *srcstart; /* beginning of valid memory for src */ + int *escaped; /* return value has escaped white space (can + * be NULL) */ { int i; char_u *s; @@ -9332,6 +9340,8 @@ eval_vars(src, usedlen, lnump, errormsg, #endif *errormsg = NULL; + if (escaped != NULL) + *escaped = FALSE; /* * Check if there is something to do. @@ -9407,6 +9417,8 @@ eval_vars(src, usedlen, lnump, errormsg, result = arg_all(); resultbuf = result; *usedlen = 2; + if (escaped != NULL) + *escaped = TRUE; #ifdef FEAT_MODIFY_FNAME skip_mod = TRUE; #endif @@ -9627,7 +9639,7 @@ expand_sfile(arg) else { /* replace "<sfile>" with the sourced file name, and do ":" stuff */ - repl = eval_vars(p, &srclen, NULL, &errormsg, result); + repl = eval_vars(p, result, &srclen, NULL, &errormsg, NULL); if (errormsg != NULL) { if (*errormsg)