patch 8.2.3468: problem with :cd when editing file in non-existent directory
Problem: Problem with :cd when editing file in non-existent directory. (Yee
Cheng Chin)
Solution: Prepend the current directory to get the full path. (closes #8903)
diff --git a/src/os_unix.c b/src/os_unix.c
index a3e5430..d192b6b 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2647,7 +2647,15 @@
{
vim_strncpy(buf, fname, p - fname);
if (mch_chdir((char *)buf))
- retval = FAIL;
+ {
+ // Path does not exist (yet). For a full path fail,
+ // will use the path as-is. For a relative path use
+ // the current directory and append the file name.
+ if (mch_isFullName(fname))
+ retval = FAIL;
+ else
+ p = NULL;
+ }
else if (*p == '/')
fname = p + 1;
else
diff --git a/src/testdir/test_cd.vim b/src/testdir/test_cd.vim
index 8eda44a..bcca2f8 100644
--- a/src/testdir/test_cd.vim
+++ b/src/testdir/test_cd.vim
@@ -208,4 +208,21 @@
call delete('XComplFile')
endfunc
+func Test_cd_unknown_dir()
+ call mkdir('Xa')
+ cd Xa
+ call writefile(['text'], 'Xb.txt')
+ edit Xa/Xb.txt
+ let first_buf = bufnr()
+ cd ..
+ edit
+ call assert_equal(first_buf, bufnr())
+ edit Xa/Xb.txt
+ call assert_notequal(first_buf, bufnr())
+
+ bwipe!
+ exe "bwipe! " .. first_buf
+ call delete('Xa', 'rf')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 4107767..00ede81 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3468,
+/**/
3467,
/**/
3466,