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

Reply via email to