feat: ":write!" skips "file changed" warning #18665

Problem:
Cannot opt-out of "WARNING: The file has been changed since reading
it!!!", even with ":write!".

Solution:
Change ":write!" to skip the warning.

closes #7270
This commit is contained in:
Louis Sven Goulet
2022-09-24 21:57:10 -04:00
committed by GitHub
parent c7cf1232a7
commit 2a3cb0893b
4 changed files with 64 additions and 5 deletions

View File

@@ -23,6 +23,8 @@ local iswin = helpers.iswin
local assert_alive = helpers.assert_alive
local expect_exit = helpers.expect_exit
local write_file = helpers.write_file
local Screen = require('test.functional.ui.screen')
local feed_command = helpers.feed_command
local uname = helpers.uname
describe('fileio', function()
@@ -36,6 +38,7 @@ describe('fileio', function()
os.remove('Xtest_startup_file2')
os.remove('Xtest_тест.md')
os.remove('Xtest-u8-int-max')
os.remove('Xtest-overwrite-forced')
rmdir('Xtest_startup_swapdir')
rmdir('Xtest_backupdir')
end)
@@ -151,6 +154,61 @@ describe('fileio', function()
command('edit ++enc=utf32 Xtest-u8-int-max')
assert_alive()
end)
it(':w! does not show "file has been changed" warning', function()
clear()
write_file("Xtest-overwrite-forced", 'foobar')
command('set nofixendofline')
local screen = Screen.new(40,4)
screen:set_default_attr_ids({
[1] = {bold = true, foreground = Screen.colors.Blue1},
[2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
[3] = {bold = true, foreground = Screen.colors.SeaGreen4}
})
screen:attach()
command("set display-=msgsep shortmess-=F")
command("e Xtest-overwrite-forced")
screen:expect([[
^foobar |
{1:~ }|
{1:~ }|
"Xtest-overwrite-forced" [noeol] 1L, 6B |
]])
-- Get current unix time.
local cur_unix_time = os.time(os.date("!*t"))
local future_time = cur_unix_time + 999999
-- Set the file's access/update time to be
-- greater than the time at which it was created.
local uv = require("luv")
uv.fs_utime('Xtest-overwrite-forced', future_time, future_time)
-- use async feed_command because nvim basically hangs on the prompt
feed_command("w")
screen:expect([[
{2:WARNING: The file has been changed since}|
{2: reading it!!!} |
{3:Do you really want to write to it (y/n)^?}|
|
]])
feed("n")
feed("<cr>")
screen:expect([[
^foobar |
{1:~ }|
{1:~ }|
|
]])
-- Use a screen test because the warning does not set v:errmsg.
command("w!")
screen:expect([[
^foobar |
{1:~ }|
{1:~ }|
<erwrite-forced" [noeol] 1L, 6B written |
]])
end)
end)
describe('tmpdir', function()