On 28-Feb-2007 22:38, Bram Moolenaar wrote:
Michael Schaap wrote:
When editing a read-only file, ":confirm w" only works the first time
you use it in a session. The second time you try to use it, you simply
get an error message, as if you didn't use ":confirm".
The same problem occurs when using ":set confirm".
To recreate:
$ echo Hello > hello.txt
$ chmod 400 hello.txt
$ vim -u NONE hello.txt
:set nocompatible " or you won't be able to overwrite at all
A, World<Esc>
:confirm w
'readonly' option is set for "qq".
Do you wish to write anyway?
(Y)es, [N]o: y
A!<Esc>
:confirm w
E505: "qq" is read-only (add ! to override)
This is using 7.0.203, but it has been happening for quite a while. An
old 6.3 does the same thing.
– Michael
What happens when 'readonly' is set is that the ":confirm" asks you if
you want to override it. If you select "yes" then it will behave as if
you did ":w!". If you do the same with 'readonly' off you don't get the
prompt, but writing fails for ":w", only ":w!" works.
And indeed, as Yakov remarked (and is documented in vim), ":w!" resets
'readonly'.
But although the 'readonly' option is no longer set, the file is still
(correctly) read-only on the file system. Perhaps it should only reset
'readonly' if this isn't the case (e.g. 'readonly' manually set, or when
running "view")? After all, the option _is_ initially set when the file
is read-only (although this doesn't appear to be documented).
Note that when 'readonly' is set then ":w" results in E45, while a
read-only file gives E505. They are two different things, but both are
overruled with ":w!". We don't have a separate "!" for each situation.
Perhaps the E505 should also trigger ":confirm w" to ask for writing
anyway. That's more difficult, but would be what you expect.
You mean that ":confirm w" should trigger a dialog in case of E505,
right? Yeah, that would make sense.
In the meantime, reading the 'readonly' help entry, I found the
'cpoptions' 'Z' flag, which solves my problem, so I added it to my .vimrc.
Thanks,
- Michael