Write with sudo without leaving Vim

Use tee or a handy plugin to save a privileged file that you forgot to open with sudo.

Ever open a privileged file in Vim, make a bunch of edits, only to :wq and get that dreaded read only error? This commonly happens when editing system files such as your /etc/hosts file. There are a few easy ways to sudo write a privileged file in Vim.

When Vim can't write to a file because it wasn't opened as sudo, this is the ominous message you'll see:

E45: 'readonly' option is set (add ! to override)

Ordinarily you might exit Vim with :q! then reopen the file with sudo vim /etc/hosts, entering your password when prompted. But then you've lost your changes and you’re forced to make your edits again. If you have the eunuch.vim plugin, you’ll have an easy option with the handy :SudoWrite command.

Calling :SudoWrite instead of :w will prompt you for your sudo password directly in Vim and then will write the file.

But what if you don’t have access to plugins? If you prefer a native Vim method, you can combine some features of Vim and the Unix tee utility to the same effect:

:w !sudo tee %

This will also prompt you for your sudo password and write the file. But how does it work? Vim allows you to write the current buffer while piping it through a command with the :w !command syntax. And Vim allows the use of the % character as a substitution for the current buffer's full file path and name. Combining these means the write is piped through the resulting command sudo tee /etc/hosts. This uses the Unix tee utility which reads from stdin and writes to both stdout and the specified file. Since tee was invoked with sudo privileges, it can write to the file even though Vim cannot.

Here’s a short screencast demonstrating both methods:

Arguably, :SudoWrite is easier to remember and eunuch.vim includes a bunch of other useful Unix utilities, so unless you're a purist, or operating off of a remote system without plugins, consider downloading eunuch.vim. Either way, stop exiting Vim and repeating your edits when you forgot to open with sudo.

Was this useful? Help us improve!

With your feedback, we can improve VimTricks. Click a link to vote: