mirror of
https://github.com/neovim/neovim.git
synced 2025-10-03 08:28:34 +00: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:
@@ -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
|
||||
|
@@ -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