patch 7.4.2274
Problem: Command line completion on "find **/filename" drops sub-directory.
Solution: Handle this case separately. (Harm te Hennepe, closes #932, closes
#939)
diff --git a/src/misc1.c b/src/misc1.c
index 8cb3b6f..d9f02b7 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -10514,18 +10514,34 @@
/* Shorten the filename while maintaining its uniqueness */
path_cutoff = get_path_cutoff(path, &path_ga);
- /* we start at the end of the path */
- pathsep_p = path + len - 1;
+ /* Don't assume all files can be reached without path when search
+ * pattern starts with star star slash, so only remove path_cutoff
+ * when possible. */
+ if (pattern[0] == '*' && pattern[1] == '*'
+ && vim_ispathsep_nocolon(pattern[2])
+ && path_cutoff != NULL
+ && vim_regexec(®match, path_cutoff, (colnr_T)0)
+ && is_unique(path_cutoff, gap, i))
+ {
+ sort_again = TRUE;
+ mch_memmove(path, path_cutoff, STRLEN(path_cutoff) + 1);
+ }
+ else
+ {
+ /* Here all files can be reached without path, so get shortest
+ * unique path. We start at the end of the path. */
+ pathsep_p = path + len - 1;
- while (find_previous_pathsep(path, &pathsep_p))
- if (vim_regexec(®match, pathsep_p + 1, (colnr_T)0)
- && is_unique(pathsep_p + 1, gap, i)
- && path_cutoff != NULL && pathsep_p + 1 >= path_cutoff)
- {
- sort_again = TRUE;
- mch_memmove(path, pathsep_p + 1, STRLEN(pathsep_p));
- break;
- }
+ while (find_previous_pathsep(path, &pathsep_p))
+ if (vim_regexec(®match, pathsep_p + 1, (colnr_T)0)
+ && is_unique(pathsep_p + 1, gap, i)
+ && path_cutoff != NULL && pathsep_p + 1 >= path_cutoff)
+ {
+ sort_again = TRUE;
+ mch_memmove(path, pathsep_p + 1, STRLEN(pathsep_p));
+ break;
+ }
+ }
if (mch_isFullName(path))
{