I’m sick and fucking tired of being asked if the reason that I use
nvim) is because I can’t figure out how to exit.
I get it, you saw some stupid shit on Stack Overflow and you think everybody
vim is incapable of knowing how it works.
After 20+ years of using
vim as my primary code and text editor, I assure you,
it’s not because I don’t know how to exit the damned thing.
In fact, I’d argue that I “exit
vim” too regularly.
I’m notorious for exiting out of
vim when I want to switch files. I use
and know my way around
newrw and even used
NERDTree in the past, but I’ve
struggled to get opening files from within
vim as part of my work flow.
Things have improved substantially over the last 2 years from a healthy dose of ridicule from my buddy Collin and my own internal desire to be the most productive individual as I can be.
Enough about me and how great I am at exiting
vim, let’s talk about the many
ways you can go about properly exit
vim and how not to.
How not to exit
CTRL-C while seemingly the “right” solution to abruptly abort a command, is
actually the command to switch from
If you were to hit
CTRL-C while in
NORMAL mode in
be greeted with an explanation of how to properly exit the editor. For
it’s simply ignored.
Even if it did work, it would cause you to lose any unsaved work depending on if you use swap files or not.
CTRL-Z will throw
vim to the background, but not actually quit. You can
vim back to the foreground by issuing the
This is my preferred way to get to the command-line while inside of
My reasoning here, instead of using
:term is that I was a long time
user. With the removal of
nvim in favor of the more modern
:terminal I felt that I should probably just get back to basics.
My use of
CTRL-Z is something I can use with any command-line utility I’m
using and isn’t specific to
nvim. I’m a big fan of ubiquitous
commands like that.
How to properly exit
If you are currently in
INSERT mode, hit
CTRL-C. This will drop you
NORMAL mode, where we can issue a command.
:q or more verbosely,
:quit, will do just that. That’s assuming
you have touched all of your open buffers or tabs and haven’t made any changes
that still need to be saved.
If you have made changes, or have open buffers or tabs and aren’t concerned with
saving any changes, you can force quit, by appending a bang to the quit command:
BOOM, you exited
If you did make changes and are interested in saving them, you need to also
issue the “write” command, which tells
vim to save / write the file to disk.
vim is amazing, you can easily chain the write command with the quit
command by issuing
The same rules apply if you have other open buffers or tabs you haven’t touched,
or have unsaved changes. If you aren’t concerned with the other open files, you
can slap our good friend bang to the end of the command to save the current
buffer and force quit:
But wait, there’s more! If you do want to save all of the open buffers before
quitting, you can sneak in the
a character which tells the write command to
write all of the files:
To me, the command reads like “write and quit all” even though it’s actually “writing all then quitting”.
Let’s say one of the files you have open is read-only. We can sneak in the bang
again to force the writing of the file:
:wqa!. This works great if the files
are read-only and you have permission to write to them.
If you have files open that you don’t have permission to write to, you’re going to have to either update the permissions of the file(s) or exit (which you now know how to do!) and try again as after switching to a user that has the correct permissions.