In order to exit Vim, first make sure you are in Normal mode by pressing Esc.
:q Enter (will prevent you from exiting if you have unsaved changes - short for :quit)To discard changes and exit Vim:
:q! Enter to force exit and discard changes (short for :quit!, not to be confused with :!q),ZQ is a shortcut that does the same as :q!,:cq Enter quit and return error (discard all changes so the compiler will not recompile this file)To save changes and exit Vim:
:wq Enter (shorthand for :write and :quit),:x Enter (same as :wq, but will not write if the file was not changed),ZZ is a shortcut that does the same as :x (Save workspace and quit the editor),:[range]wq! Enter (write the lines in [range])To close multiple buffers at once (even in multiple windows and/or tabs), append the letter a to any of the Commands above (the ones starting with :). For example, to write and quit all windows you can use:
:wqa Enter or:xa Enter — Write all changed buffers and exit Vim. If there are buffers without a file name, which are readonly or which cannot be written for another reason, Vim will not quit:xa! Enter — Write all changed buffers, even the ones that are readonly, and exit Vim. If there are buffers without a file name or which cannot be written for another reason, Vim will not quit:qa Enter — try to quit, but stop if there are any unsaved files;:qa! Enter — quit without saving (discard changes in any unsaved files)If you have opened Vim without specifying a file and you want to save that file before exiting, you will receive E32: No file name message. You can save your file and quit using:
:wq filename Enter or;:x filename EnterThe : keystroke actually opens Command mode. The command q is an abbreviation of quit, w, of write and x, of exit (you can also type :quit, :write and :exit if you want). Shortcuts not starting with : such as ZZ and ZQ refer to Normal mode key mappings. You can think of them as shortcuts.
The ! keystroke is sometimes used at the end of a command to force its execution, which allows to discard changes in the case of :q!.
Placing the ! at the beginning of the command has a different meaning.
For example, one can mistype :!q instead of :q! and vim would terminate with a 127 error.
An easy way to remember this is to think of ! as a way of insisting on executing something.
Just like when you write: "I want to quit!"