6

I find that with vim, if I try and edit a file which as a normal user I do not have write access with, even if I use sudo, I am unable to write to it, although if I use nano to edit the same file it works.

So for instance if I do:

sudo vim /var/path/to/file.conf

I will get this in the file and not be able to edit that file:

"/var/path/to/file.conf" [readonly]

But if I instead do:

sudo nano /var/path/to/file.conf

It will be able to write to the file, why is this, why does sudo not give vim write access like it does with nano? Is this some sort of bug? Or is this just something which is meant to be? Because it is very annoying.


OS Information:

Description:    Ubuntu 15.04
Release:    15.04

Package Information:

vim:
  Installed: 2:7.4.488-3ubuntu2
  Candidate: 2:7.4.488-3ubuntu2
  Version table:
 *** 2:7.4.488-3ubuntu2 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status
  • It could be hosted on a read-only filesystem. run mount to see if /var/path/to is located in the output, then post what filesystem type it's on. – NuclearPeon May 07 '15 at 17:02
  • 1
    @NuclearPeon nano can write to the file, so it's not on a readonly filesystem. – Eliah Kagan May 07 '15 at 17:09
  • Although there is already an accepted answer, maybe this will help: http://askubuntu.com/questions/471776/wq-on-vim-does-not-save - could be a difference between vi and vim – NuclearPeon May 07 '15 at 17:21
  • @NuclearPeon In that question, the user cannot override lack of write permissions because they do not own the file. The file is owned by root and set writeable only by root; thus one must sudo to root to edit it (or use sudoedit, which does the same thing behind the scenes on exit). Since the file has write permissions set for root, ! isn't needed to save changes when editing it as root. In this question, the user owns the file, but it's (probably) not set writable for anyone, so there's no reason to edit as root (and ! is needed even with sudo). – Eliah Kagan May 07 '15 at 17:49

1 Answers1

15

This is the intended behavior of vim (and vi).

When you edit a readonly file, attempting to write the file the usual way (with :w) fails. This is to prevent you from accidentally changing a readonly file you might not wish to change.

If you really want to override the readonly permissions on a file that you own, and write your changes to the file, you must use the :w! command so vim knows this is what you want.

  • This is similar to how :q will not quit if there are unsaved changes, but :q! will.

If you want to write any changes and quit in one command, you can use :wq! or :x!.

Eliah Kagan
  • 117,780
  • 3
    This will also happen if you've accessed the file with -R. you could read about this and more with :help readonly from within vim, from the manpages. – Kasisnu May 07 '15 at 17:23
  • 2
    It wont work when using sudo, even with :w! any idea? – Arnold Roa Aug 18 '16 at 02:54
  • If it doesn't work, even with w!, perhaps the file has an immutable attribute set. See here for more info and details on how to remove it: https://unix.stackexchange.com/a/67509/365977 – Scotty Jamison Jan 11 '22 at 01:14