61

I opened a file in readonly mode; is there a way to get out of readonly mode?

3
  • What are the limitation in readonly mode that are bothering you? If it's just that you want to write the file, even though you opend it read only, then adding a! to the w command will do the trick, as Michael stated.
    – Bananguin
    Apr 4, 2013 at 11:59
  • 1
    @user1129682 it's just the inconvenience of remembering to put an exclamation mark after w every time I want to save. heh Apr 4, 2013 at 20:01
  • The answer would be different depending on the reason for the editor ending up in read-only mode.
    – Kusalananda
    Apr 16, 2020 at 17:55

7 Answers 7

60

You could do this:

:set noro

That unsets the read-only flag, but if the underlying file is still not writable by you then vim still will be unable to write to it.

4
  • 3
    how to reverse this and go back to read only?
    – Louis Hong
    Nov 5, 2016 at 19:31
  • 5
    @LouisHong Very easily: :set ro. Nov 14, 2016 at 9:58
  • 1
    This is perfect for if you open a writable file with view but then decide to edit it.
    – wisbucky
    Mar 1, 2017 at 23:14
  • The reverse can be useful too. For example, psql has a meta command (\ev) to edit a SQL view, which opens vim to write. But, if I want to make sure I don't actually change the view (in production!) I can immediately :set ro. :) Jan 27, 2020 at 20:01
13

You can run chmod from within vim:

:!chmod +w %

! means run a shell command, and % is the current filename. You can also just force the file write:

:w!
4

In addition to Michael Mrozek's answer, you can add a line to your .vimrc that allows you to write to a file that you have neglected to open with elevated permissions:

" Allows writing to files with root priviledges
cmap w!! w !sudo tee % > /dev/null

If the file is read only, you have only to enter :w!!, you will be prompted for your password and then the file will be successfully written to.

3

While :set noro does the job, it doesn't check if the file is opened by another vim instance or updates the file if changed externally.

In order to make it editable and check for swap files (which is the default opening a file with vim) just use the edit command (:help edit):

:e

Note, if the file has been manipulated ever since (even outside of vim), it will update the changes in the current buffer (which I find normally desirable).

3

Here I go, although a bit late, maybe you already solved your doubt ;) I haven't seen in any of the comments a way I know with vim, so, I add it:

Once you are editing a file, you press :w or :wq, and you see the annoying message "E45 'readonly' option is set (add ! to override)"

E45 readonly option is set (add ! to override)

You can type

:w !sudo tee %

w !sudo tee %

  • w writes the buffer,
  • !sudo calls the shell with sudo,
  • tee redirects the output of vim :w to the output with tee, and
  • % is the current filename

And that should do the trick. Note that this will prompt to reload the file in vim, for what you have to press L

enter image description here

-2

Try this one:

vim -R "filename" 

it open in read only mode, then just do this command :q

I tried and it worked for me

1
  • 1
    Sorry. I have no idea what you are saying. Nov 7, 2020 at 22:46
-3

Try using sudo. As root you need to open the file. Sudo is a command where you can request permission from linux.

eg.

sudo vim "filename" 
1
  • 2
    This has nothing to do with permissions or privileges. In addition, you should never use sudo to run an editor; use sudoedit instead. Apr 16, 2020 at 17:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .