mirror of
https://github.com/neovim/neovim.git
synced 2026-08-27 09:31:47 +00:00
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:
committed by
GitHub
parent
c7cf1232a7
commit
2a3cb0893b
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user