Mercurial > vim
changeset 1098:5a1d8468d1fa v7.0.224
updated for version 7.0-224
author | vimboss |
---|---|
date | Tue, 27 Mar 2007 14:57:09 +0000 |
parents | 537cb92935b6 |
children | 2ec8266fa254 |
files | src/eval.c src/ex_docmd.c src/proto/ex_docmd.pro src/version.c |
diffstat | 4 files changed, 24 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -8924,7 +8924,7 @@ f_expand(argvars, rettv) if (*s == '%' || *s == '#' || *s == '<') { ++emsg_off; - rettv->vval.v_string = eval_vars(s, &len, NULL, &errormsg, s); + rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL); --emsg_off; } else
--- 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)
--- a/src/proto/ex_docmd.pro +++ b/src/proto/ex_docmd.pro @@ -44,7 +44,7 @@ extern int vim_mkdir_emsg __ARGS((char_u extern FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode)); extern void update_topline_cursor __ARGS((void)); extern void exec_normal_cmd __ARGS((char_u *cmd, int remap, int silent)); -extern char_u *eval_vars __ARGS((char_u *src, int *usedlen, linenr_T *lnump, char_u **errormsg, char_u *srcstart)); +extern char_u *eval_vars __ARGS((char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped)); extern char_u *expand_sfile __ARGS((char_u *arg)); extern int put_eol __ARGS((FILE *fd)); extern int put_line __ARGS((FILE *fd, char *s));