mirror of
https://github.com/neovim/neovim.git
synced 2026-10-26 15:40:20 -05:00
fix(cmd): :update writes new file buffers only for real files #35939
Problem: :update should write new file buffers, but previous fix affected special buffer types (acwrite, nofile, etc.). Solution: Add bt_nofilename() check to only write new files for buffers representing real filesystem paths.
This commit is contained in:
1 parent
03032d1f73
commit
fcf752476a
4 files changed
+17
-2
No files matched your search
@@ -989,7 +989,8 @@ slower (but safer).
|
||||
*:up* *:update*
|
||||
:[range]up[date][!] [++opt] [>>] [file]
|
||||
Like ":write", but only write when the buffer has been
|
||||
modified.
|
||||
modified, or when the buffer represents a new file
|
||||
that doesn't exist on disk.
|
||||
|
||||
|
||||
WRITING WITH MULTIPLE BUFFERS *buffer-write*
|
||||
|
||||
@@ -308,6 +308,7 @@ Commands:
|
||||
- |:trust|
|
||||
- User commands can support |:command-preview| to show results as you type
|
||||
- |:write| with "++p" flag creates parent directories.
|
||||
- |:update| command writes new file buffers even when unmodified.
|
||||
|
||||
Editor:
|
||||
- |prompt-buffer| supports multiline input/paste, undo/redo, and o/O normal
|
||||
|
||||
+3
-1
@@ -1772,7 +1772,9 @@ void ex_file(exarg_T *eap)
|
||||
/// ":update".
|
||||
void ex_update(exarg_T *eap)
|
||||
{
|
||||
if (curbufIsChanged() || (curbuf->b_ffname != NULL && !os_path_exists(curbuf->b_ffname))) {
|
||||
if (curbufIsChanged()
|
||||
|| (!bt_nofilename(curbuf) && curbuf->b_ffname != NULL
|
||||
&& !os_path_exists(curbuf->b_ffname))) {
|
||||
do_write(eap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,4 +258,15 @@ describe(':update', function()
|
||||
eq(1, eval('g:write_pre'))
|
||||
eq(1, eval('g:write_post'))
|
||||
end)
|
||||
|
||||
it('does not write acwrite buffer when unchanged', function()
|
||||
command('file remote://test')
|
||||
command('setlocal buftype=acwrite')
|
||||
command('let g:triggered = 0 | autocmd BufWriteCmd remote://* let g:triggered = 1')
|
||||
command('update')
|
||||
eq(0, eval('g:triggered'))
|
||||
command('call setline(1, ["hello"])')
|
||||
command('update')
|
||||
eq(1, eval('g:triggered'))
|
||||
end)
|
||||
end)
|
||||
Reference in new issue
Block a user