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
>> :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
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.