patch 8.2.3219: :find searches non-existing directories
Problem: :find searches non-existing directories.
Solution: Check the path is not "..". Update help. (Christian Brabandt,
closes #8612, closes #8533)
This commit is contained in:
committed by
Bram Moolenaar
parent
8a4c812ede
commit
7a4ca32175
@ -1749,6 +1749,12 @@ There are three different types of searching:
|
||||
/u/user_x/work/include
|
||||
/u/user_x/include
|
||||
|
||||
< Note: If your 'path' setting includes an non-existing directory, Vim will
|
||||
skip the non-existing directory, but continues searching in the parent of
|
||||
the non-existing directory if upwards searching is used. E.g. when
|
||||
searching "../include" and that doesn't exist, and upward searching is
|
||||
used, also searches in "..".
|
||||
|
||||
3) Combined up/downward search:
|
||||
If Vim's current path is /u/user_x/work/release and you do >
|
||||
set path=**;/u/user_x
|
||||
|
||||
@ -578,7 +578,16 @@ vim_findfile_init(
|
||||
|
||||
if (p > search_ctx->ffsc_fix_path)
|
||||
{
|
||||
// do not add '..' to the path and start upwards searching
|
||||
len = (int)(p - search_ctx->ffsc_fix_path) - 1;
|
||||
if ((len >= 2
|
||||
&& STRNCMP(search_ctx->ffsc_fix_path, "..", 2) == 0)
|
||||
&& (len == 2
|
||||
|| search_ctx->ffsc_fix_path[2] == PATHSEP))
|
||||
{
|
||||
vim_free(buf);
|
||||
goto error_return;
|
||||
}
|
||||
STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len);
|
||||
add_pathsep(ff_expand_buffer);
|
||||
}
|
||||
|
||||
@ -228,4 +228,26 @@ func Test_find_cmd()
|
||||
call assert_fails('tabfind', 'E471:')
|
||||
endfunc
|
||||
|
||||
func Test_find_non_existing_path()
|
||||
new
|
||||
let save_path = &path
|
||||
let save_dir = getcwd()
|
||||
call mkdir('dir1/dir2', 'p')
|
||||
call writefile([], 'dir1/file.txt')
|
||||
call writefile([], 'dir1/dir2/base.txt')
|
||||
call chdir('dir1/dir2')
|
||||
e base.txt
|
||||
set path=../include
|
||||
|
||||
call assert_fails(':find file.txt', 'E345:')
|
||||
|
||||
call chdir(save_dir)
|
||||
bw!
|
||||
call delete('dir1/dir2/base.txt', 'rf')
|
||||
call delete('dir1/dir2', 'rf')
|
||||
call delete('dir1/file.txt', 'rf')
|
||||
call delete('dir1', 'rf')
|
||||
let &path = save_path
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@ -755,6 +755,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3219,
|
||||
/**/
|
||||
3218,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user