mirror of
https://github.com/neovim/neovim.git
synced 2026-08-20 22:31:11 +00:00
fix(:bcd): do not "inherit" buffer-local dir
Problem: Buffer-local CWD (:bcd) is "sticky", similar to window-local CWD (:lcd). But this contradicts one of its main benefits: per-buffer "project root" for LSP, OSC7. Other problems: - A buffer created with :edit/:enew/:new silently inherits b_localdir (and b_prevdir) from the previous buffer. - curbuf_reusable() refuses to recycle a scratch buffer that has `b_localdir`. - After :new/:vnew/:tabnew the CWD sticks to previous buffer's `b_localdir` even though the new curbuf has none, so :new is not equivalent to ":split | enew", and getcwd() disagrees with haslocaldir(). - Requires "which buffer spawned this buffer" semantics that no other buffer-local state has. Solution: Drop sticky/inherit behavior of buffer-local CWD (:bcd). - do_ecmd: always apply the new curbuf's dir (`fix_current_dir`), like `do_autochdir` already does. :tabnew from a :bcd buffer now reverts to global CWD (and fires DirChanged), same as :tabnew from a :lcd window. - curbuf_reusable(): recycling a scratch buffer frees its b_localdir. To get sticky/inherit behavior of CWD, use `:lcd`.
This commit is contained in:
@@ -1093,7 +1093,7 @@ local options = {
|
||||
doc = [[on on Unix, off on Windows]],
|
||||
},
|
||||
desc = [=[
|
||||
When on, |:cd|, |:tcd| and |:lcd| without an argument changes the
|
||||
When on, |:cd|, |:tcd|, |:lcd| and |:bcd| without an argument changes the
|
||||
current working directory to the |$HOME| directory like in Unix.
|
||||
When off, those commands just print the current directory name.
|
||||
]=],
|
||||
@@ -1113,7 +1113,7 @@ local options = {
|
||||
deny_duplicates = true,
|
||||
desc = [=[
|
||||
This is a list of directories which will be searched when using the
|
||||
|:cd|, |:tcd| and |:lcd| commands, provided that the directory being
|
||||
|:cd|, |:tcd|, |:lcd| and |:bcd| commands, provided that the directory being
|
||||
searched for has a relative path, not an absolute part starting with
|
||||
"/", "./" or "../", the 'cdpath' option is not used then.
|
||||
The 'cdpath' option's value has the same form and semantics as
|
||||
@@ -2119,7 +2119,7 @@ local options = {
|
||||
following occurrence.
|
||||
*cpo-~*
|
||||
~ When included, don't resolve symbolic links when
|
||||
changing directory with |:cd|, |:lcd|, or |:tcd|.
|
||||
changing directory with |:cd|, |:tcd|, |:lcd|, or |:bcd|.
|
||||
This preserves the symbolic link path in buffer names
|
||||
and when displaying the current directory. When
|
||||
excluded (default), symbolic links are resolved to
|
||||
|
||||
Reference in New Issue
Block a user