On 2/27/07, Michael Schaap <vim mscha.org> wrote:
> Hi,
>
> 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.
You see this behaviour because the first :confirm w(or
':w!',
for this matter) resets the 'ro' option. This is the reason
the 2nd
':confirm w' doesn't ask anything. You can see yourself if
you do
'set ro?' before and after first ':confirm w'.
:set ro?
readonly
:confirm w
... (Y)es, [N]o: y
:set ro?
noreadonly
As you see, the 'ro' option has been reset. This is
the reason the following ':confirm w' does not ask for
the confirmation.
AFAIK, vim always behaved this way -- that is,
the ':w!' would reset the ro flag.
But notice that inserting text into 'ro' file does not reset
the 'ro'
flag by itself.
It warns (modifying the readonly file). but the 'ro' flag
remains. After
:w!, 'ro' flag is reset.
Yakov
|