- Vim Cheat Sheet Wallpaper
- Vim Cheat Sheet 4k
- Vim Cheat Sheet For Programmer
- Vim cheat sheet Allison McKnight (aemcknig@andrew.cmu.edu) Vim is considered as clone Vi editor. Like Vi, it is also command centric editor. One of the advantage of learning Vim is – it is available everywhere. Take any UNIX variant like Linux, Mac, HP-UX, AIX and many more, Vim is there by default.
- Check this one-page cheat sheet that will help you get back to work quickly and improve your velocity while working in Vi / Vim: Vi & Vim Cheat Sheet in PDF format This is a core essentials Vi & Vim cheat sheet which cover the basic quick references of Vi insert mode, edit commands, ex commands, navigation, search and substitute, etc.
VI “Cheat” Sheet ACNS Bulletin ED–03 February 1995 File management commands:w name Write edit buffer to file name:wq Write to file and quit:q! Quit without saving changes ZZ Same as:wq:sh Execute shell commands (d) Window motions d Scroll down (half a screen) u Scroll up (half a screen) f Page forward b Page.
Since the 1970s, Vi and Vim are popular amongst developers and are present on most UNIX-based servers.
These free and open source modal text editors can be a bit hard to use at first, but they are extremely powerful.
Here is our ultimate Vim Cheat Sheet, featuring over 150 commands to supercharge your coding with Vi/Vim.
A Quick Intro to Vim
Vi is a modal text editor first released in 1976 for Unix systems. Vim, (Vi Improved) Vi’s successor, was first released in 1991. Despite its very old age, Vim is extremely popular among web developers and system administrators, as it is installed by default on all Unix-based systems (Mac OS and Linux distros).Unlike classic text editors, Vim features different modes used for different operations. Vim has a total of 12 modes, although you will mostly use the following:
- Insert Mode: This mode is used to insert text by typing, like you would do on any other text editor. To enter insert mode, type
i
while in command mode. - Command Mode: Also named Normal Mode, this mode is used to type Vim commands such as those you’ll find in our Vim Cheat Sheet. To exit insert mode and enter command mode, hit the
Esc
key of your keyboard. - Visual Mode: Similar to command mode, but used to highlight areas of text. Normal commands are run on the highlighted area, which, for instance, can be used to move or edit a selection. Press the
v
key to start visual mode. To exit visual mode, press the Esc
key.
Basics
Let’s start with basic commands that will allow you to write, save and quit files. Remember that these Vim commands need to be typed while in command or visual mode. Exit insert mode by hitting the Esc key, then type the command of your choice.
:e filename | Open filename for edition |
:w | Save file |
:q | Exit Vim |
:q! | Quit without saving current file |
:x | Write/Save file (if changes has been made) and exit |
:sav filename | Save current file as filename |
. | Repeat the last change made in normal mode |
5. | Repeat 5 times the last change made in normal mode |
Moving In The File
Vim features powerful commands that allow you to easily move the cursor position to any desired location within the current file, making it quick and easy to insert text.
k or Up Arrow | move cursor up one line |
j or Down Arrow | move cursor down one line |
e | move cursor to the end of the word |
b | move the cursor to the beginning of the word |
0 | move the cursor to the first non-blank character of the line |
G | move the cursor to the end of the file |
gg | move the cursor position to the beginning of the file |
L | move the cursor to the bottom of the screen |
:59 | move cursor to line 59. Replace 59 by the desired line number. |
% | Move cursor to matching parenthesis |
[[ | Jump to function start |
[{ | Jump to block start |
Cut, Copy & Paste
Vim features powerful functions to cut, copy, and paste. This section of our Vim Cheat Sheet will show you how to easily perform those operations.Please note that
y
stands for
yank in Vim, which in other editors is usually called copy.
y | Yank/Copy the selected text to clipboard |
p | Paste clipboard contents |
dd | Cut current line |
yw | Yank/Copy word |
yy | Yank/Copy current line |
y$ | Yank/Copy to end of line |
D | Cut to end of line |
Search
Searching a string within a huge file or multiple files can be tricky. Thanks to Vim, using a few commands you can easily find whatever you’re looking for.
/word | Search word from top to bottom |
?word | Search word from bottom to top |
* | Search the word under cursor |
/cstring | Search STRING or string, case insensitive |
/jo[ha]n | Search john or joan |
/< the | Search the, theatre or then |
/the> | Search the or breathe |
/< the> | Search the |
/< ¦.> | Search all words consisting of 4 letters |
// | Search fred but not alfred or frederick |
/fred|joe | Search fred or joe |
/<dddd> | Search exactly 4 digits |
/^n{3} | Find 3 empty lines |
:bufdo /searchstr/ | Search in multiple files |
bufdo %s/something/somethingelse/g | Search something in all the open buffers and replace it with somethingelse |
Replace
Similar to
Search, Vim features powerful commands to replace any given text. This part of our cheat sheet contains Vim commands for replacing any portion of text with another.
:%s/old/new/g | Replace all occurences of old with new in file |
:%s/onward/forward/gi | Replace onward with forward, case insensitive |
:%s/old/new/gc | Replace all occurences with confirmation |
:2,35s/old/new/g | Replace all occurences between lines 2 and 35 |
:5,$s/old/new/g | Replace all occurences from line 5 to EOF |
:%s/^/hello/g | Replace the beginning of each line by hello |
:%s/$/Harry/g | Replace the end of each line by Harry |
:%s/onward/forward/gi | Replace onward with forward, case insensitive |
x | Delete character |
:%s/ *$//g | Delete all white spaces and keep any non-blank character |
:g/string/d | Delete all lines containing string |
:v/string/d | Delete all lines not containing string |
:s/Bill/Steve/ | Replace the first occurrence of Bill with Steve in current line |
:s/Bill/Steve/g | Replace Bill with Steve in current line |
:%s/Bill/Steve/g | Replace Bill with Steve in all of the file |
:%s/^M//g | Delete DOS carriage returns (^M) |
:%s/r/r/g | Transform DOS carriage returns in returns |
:%s#<[^>]+>##g | Delete HTML tags but keep text |
:%s/^(.*)n1$/1/ | Delete lines that appear twice |
Ctrl+a | Increment number under the cursor |
Ctrl+x | Decrement number under cursor |
ggVGg? | Change text to Rot13 |
Case
Vim provides very interesting commands to deal with case. Let’s continue to explore our Vim Cheat Sheet with super useful case-related commands.
Vu | Lowercase line |
VU | Uppercase line |
g~~ | Invert case |
vEU | Switch word to uppercase |
vE~ | Modify word case |
ggguG | Set all text to lowercase |
gggUG | Set all text to uppercase |
:set ignorecase | Ignore case in searches |
:set smartcase | Ignore case in searches except if an uppercase letter is used |
:%s/<./u&/g | Sets the first letter of each word to uppercase |
:%s/<./l&/g | Sets the first non-blank character of each word to lowercase |
:%s/.*/u& | Sets the first character of the line to uppercase |
:%s/.*/l& | Sets the first character of the line to lowercase |
Read and Write Files
Vim allows easy manipulation of files. Listed below are a few examples of file manipulation with Vim.
:1,10 w outfile | Save lines 1 to 10 in outfile |
:1,10 w >> outfile | Append lines 1 to 10 to outfile |
:r infile | Insert the content of infile |
:23r infile | Insert the content of infile under line 23 |
File Explorer
Vim features a built-in file explorer that allows its users to quickly visualize and open files in the editor.
:e . | Open integrated file explorer |
:Sex | Split window and open integrated file explorer |
:Sex! | Same as :Sex but splits window vertically |
:browse e | Graphical file explorer |
:ls | List buffers |
:cd .. | Move to parent directory |
:args | List files |
:args *.php | Open file list |
:grep expression *.php | Return a list of .php files contening expression |
gf | Open file name under cursor |
Interacting With Unix
As Vi and Vim were initially built for Unix systems, the text editor can interact with the OS.
:!pwd | Execute the pwd Unix command, then return to Vi |
!!pwd | Execute the pwd unix command and insert output in file |
:sh | Temporary return to Unix |
$exit | Return to Vi |
Alignment
Using Vim, it’s possible to automatically align lines using a few simple commands. Here are the main important ones:
:%!fmt | Align all lines |
!}fmt | Align all lines at the current position |
5!!fmt | Align the next 5 lines |
Tabs and Windows
Vim can use various tabs and windows, which is very useful for working with many files at once.
:tabnew | Create/Open a new tab |
gt | Show next tab |
:tabfirst | Show first tab |
:tablast | Show last tab |
:tabm n(position) | Rearrange tabs |
:tabdo %s/foo/bar/g | Execute a command in all tabs |
:tab ball | Puts all open files in tabs (Each in a new tab) |
:new abc.txt | Edit abc.txt in new window |
Window Spliting
As a web developer, I always like to split my Vim editor in two parts, one for my HTML and one for my CSS stylesheet. This part of our Vim Cheat Sheet describes how to split the main editor window.
:e filename | Edit filename in current window |
:split filename | Split the window and open filename |
ctrl-w up arrow | Put cursor in top window |
ctrl-w ctrl-w | Put cursor in next window |
ctrl-w_ | Maximize current window vertically |
ctrl-w| | Maximize current window horizontally |
ctrl-w= | Gives the same size to all windows |
10 ctrl-w+ | Add 10 lines to current window |
:vsplit file | Split window vertically |
:sview file | Same as :split in Read Only Mode |
:hide | Close current window |
:nly | Close all windows, except current |
:b 2 | Open #2 in this window |
Auto Completion
Like much more modern editors, Vim can auto-complete your code and use dictionaries.
Ctrl+N Ctrl+P (in insert mode) | Complete word |
Ctrl+x Ctrl+l | Complete line |
:set dictionary=dict | Define dict as a dictionary |
Ctrl+x Ctrl+k | Complete with dictionary |
Markers
Vim allows its users to set marks at a position of their choice, so they can easily jump back to that predefined position. A must when working with large files.
m {a-z} | Marks current position as {a-z} |
‘ {a-z} | Move to position {a-z} |
” | Move to previous position |
Abbreviations
Another handy Vim function is the possibility to define abbreviations.
:ab mail mail@provider.org | Define mail as abbreviation of mail@provider.org |
Text Indent
Indentation is the key to readable and easy-to-maintain code. Vim possesses a few commands that will come in handy for indenting any file.
:set autoindent | Turn on auto-indent |
:set smartindent | Turn on intelligent auto-indent |
:set shiftwidth=4 | Define 4 spaces as indent size |
ctrl-t, ctrl-d | Indent/un-indent in insert mode |
>> | Indent |
<< | Un-indent |
=% | Indent the code between parenthesis |
1GVG= | Indent the whole file |
Syntax Highlighting
Syntax highlighting is often very useful for preventing coding mistakes and typos. Vim can work with many different syntax highlighting modes, depending on which programming language you are coding with.
:syntax on | Turn on syntax highlighting |
:syntax off | Turn off syntax highlighting |
:set syntax=perl | Force syntax highlighting |
Learn Vim from scratch and quickly become more productive.
Vim Cheat Sheet Wallpaper
Design, develop, and deploy end-to-end applications with Vim.
Bash/Zsh vi mode
You can use vi mode in your shell by setting the mode. By defaultBash uses emacs mode but you can update your .bashrc or set itmanually. By default, it puts you in insert mode, so it doesn'tfeel very different from emacs mode. You can switch in tocommand mode when you need to manipulate or navigate the line.
- Switch shell modes with
set -o vi
and back with set -o emacs
. - In Zsh, there is a
vi-mode
plugin that can be enabled which allowsthemes to show an indicator if you are in command mode. For example,the avit
theme. - Go through previous/next commands with
j
and k
when in command mode.CTRL-P and CTRL-N may or may not still work since they are emacs binds.Up and down arrows usually still work. - Search history with
/
. CTRL-R
and CTRL-S
might still work. - Press
v
in command mode to pull up the full editor with the commandin the open buffer. When you save and exit, the final output from theeditor is dropped in your shell ready to run. Change the default editorthat is opened when pressing v
by changing EDITOR
environmentvariable. For example, export EDITOR=vim
.
Rebinding CAPS to ESC
I highly recommend remapping the CAPS LOCK
key to ESC
to makeswitching modes easier.
I have instructions on how to do this in Windows, Mac, and Linux in the post: Rebind Caps Lock key to Escape/Control.
Switch between modes
CTRL-[
or ESC
to to command mode.i
, a
, and o
to go in to insert mode.I
, A
, and O
to go in to insert mode alternate ways.
Launching vim
- Run
vim
by itself to open an unnamed buffer - Open a single file with
vim filename
- Open multiple buffers (single window)
vim file1 file2 file3
- Open multiple buffers (split windows)
- Horizontally split:
vim -o file1 file2
- Vertically split:
vim -O file1 file2
Managing windows
- Split with current file using
:vsplit
, :split
, CTRL-W S
, CTRL-W V
. - Optionally open new files like
:vsplit filename
. - Switch windows with
CTRL-W W
. - Close a window with
:q
or CTRL-W Q
. - Resize windows with
CTRL-W
to intiate the chord,then follow up with one of:- Shrink and expand vertical with
-
or +
. - Shrink and expand horizontal with
<
and >
. - Maximize vertical with
_
. - Maximize width with
|
. - Split everything equally with
=
.
- Resize using commands:
- Horizontal resize with
:resize 20
, :res -3
, or :res +3
- Vertical resize with
:vertical resize 20
, :vertical res -3
, or :vertical res +3
Buffers, reading & opening files
Buffers (open files) are separate from windows.You can have multiple windows all for the same buffer.You can also have one window with multiple buffersopen in the background. Buffers are always in-memory.It is only when you write using a commandthat the changes are saved to disk.
Loading files in to buffers- Open a file for editing with :e filename
- Split window w/ new unnamed buffer using :vnew
or :new
.- Use :enew
to edit new buffer in current window.- Use :tabnew
to open tab w/ new buffer.
- List available buffers with
:ls
. - Create a new unnamed
- Switch current window buffer with
:b2
or :b!2
, :bnext
:bprevious
.
Saving and exiting
- Simple exit with
q
. - Force quit (ignore changes) with
q!
. - Save/write with
:w
- Save and quit with
:wq
or :x
or ZZ
.
Moving around
You can multiply any of these commands by pressing a number first.
- General move with
j
, k
, l
, h
- Scroll up and down full/half pages with
CTRL-D
, CTRL-U
, CTRL-B
, CTRL-F
. - Go forward and backward with
w
, b
, W
, B
. - Go to beginning and end of file with
gg
and G
. - Go to specific lines (e.g. 33) with
:33
or 33G
. - Go to beginning and end of lines with
$
, ^
, and 0
.
Cut, paste, delete
- Delete character with
x
. - Make visual selections with
v
or V
. - Copy/yank selection with
y
. - Delete/cut selection with
d
. - Copy/yank line with
yy
. - Delete/cut a line with
dd
. - Paste with
p
or P
.
Undo/Redo
Vim Cheat Sheet 4k
- Just press
u
in command mode. - Type
:u
command and press enter. - Redo a command with
CTRL-R
. - Repeat last command with
.
Editing
Delete and change are similar but change will delete the itemand switch in to insert mode. Delete will only delete.For both, you can work 'inside' an element, or on 'all' of theelement, signified with the keys a
or i
. For example'delete inside )' will delete everything inside the parenthesis.'delete all-of )' will delete the everythign inside AND parenthesis.This works with words, quotation marks, parenthesis, brackets, braces, etc.
Vim Cheat Sheet For Programmer
- Change inside/all word with
caw
or ciw
. - Change inside/all like
ci)
or ci'
. - Delete to something like
dt)
or dt'
. - Delete inside something like
di}
or di]
. - Delete a/all like
daw
, da)
, da'
.
Search, find, and replace
- Search like
/sometext
. - Re-run last search with just a blank
/
Search backwards with ?sometext
Repeat last search with n
.
Repeat last search but backwards with N
.
:s/old/new/
- Swap text (next occurence on current line)
:s/old/new/g
- Swap text (globally on current line)
:%s/old/new/
- Swap text (next occurence in file)
:%s/old/new/g
- Swap text (globally in file):%s/old/new/gc
- Swap text with confirmation (globally in file)
Running shell commands
- Execute commands like this
:!ls
. - Can also read output in to file with
:r !ls
Macros
- To start and stop a macro recording, press
q
in command mode. - The first letter pressed after hitting
q
is the register wherethe macro is stored. For example, qt
would put the macro in the t
register. - To replay the macro, enter
@<register>
for example @t
. - Repeat a macro with
@@
. - Repeat a macro multiple times w/ a number prefix. E.g.
5@t
.
Misc
- Read file contents and output at cursor with
:r filename
- Open file explorer with
:Explore
Digraphs
:help digraph
to get more information- Run
:digraph
to see extended ASCII characters.Type CTRL-V
+ the characters in the digraph. E.g. CTRL-V + 172
.
My ~/.vimrc