Mercurial > vim
diff src/search.c @ 3699:d29aa05b7e31 v7.3.609
updated for version 7.3.609
Problem: File names in :checkpath! output are garbled.
Solution: Check for \zs in the pattern. (Lech Lorens)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 25 Jul 2012 13:46:30 +0200 |
parents | c612d154bcdd |
children | 9f48a5432997 |
line wrap: on
line diff
--- a/src/search.c +++ b/src/search.c @@ -4740,17 +4740,33 @@ find_pattern_in_path(ptr, dir, len, whol * Isolate the file name. * Include the surrounding "" or <> if present. */ - for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++) - ; - for (i = 0; vim_isfilec(p[i]); i++) - ; + if (inc_opt != NULL + && strstr((char *)inc_opt, "\\zs") != NULL) + { + /* pattern contains \zs, use the match */ + p = incl_regmatch.startp[0]; + i = (int)(incl_regmatch.endp[0] + - incl_regmatch.startp[0]); + } + else + { + /* find the file name after the end of the match */ + for (p = incl_regmatch.endp[0]; + *p && !vim_isfilec(*p); p++) + ; + for (i = 0; vim_isfilec(p[i]); i++) + ; + } + if (i == 0) { /* Nothing found, use the rest of the line. */ p = incl_regmatch.endp[0]; i = (int)STRLEN(p); } - else + /* Avoid checking before the start of the line, can + * happen if \zs appears in the regexp. */ + else if (p > line) { if (p[-1] == '"' || p[-1] == '<') {