From c6376c798433bcb9ee38a8664299d11454546950 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 3 Oct 2021 19:29:48 +0100 Subject: [PATCH] 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) --- src/os_unix.c | 10 +++++++++- src/testdir/test_cd.vim | 17 +++++++++++++++++ src/version.c | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/os_unix.c b/src/os_unix.c index a3e5430ef..d192b6bcf 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2647,7 +2647,15 @@ mch_FullName( { 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 8eda44aff..bcca2f8e7 100644 --- a/src/testdir/test_cd.vim +++ b/src/testdir/test_cd.vim @@ -208,4 +208,21 @@ func Test_cd_completion() 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 410776742..00ede81ab 100644 --- a/src/version.c +++ b/src/version.c @@ -757,6 +757,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3468, /**/ 3467, /**/ -- 2.50.1