vim

Vim is a console text editor designed to make you feel like a noob.

Modes

Vim has two modes, which I'll call navigation and editing mode. In navigation mode, you are not making any direct changes to the text by typing. You can still perform actions such as copying, pasting, moving, deleting, etc. along with file operations such as opening and saving files.

Editing mode is where anything you type is recorded.

To enter 'edit' mode, you would need to tell vim to enter it. i is the simplest keypress, meaning “insert here.”“

Keys

A lot of keys in vim will do similar events but slightly different based on case. i means insert here (current position). I means insert above this line and start the cursor there. p means paste here while P would paste above the current line.

You can also prefix any commands with a number to do it $x amount of times. So use y to yank a letter, or 5y to yank the next 5 lines.

Some handy keys:

Keypress Action
$ Move to end of line
^ Move to start of line
w next word
b previous word
i insert here
I insert above this line
o insert line and edit here
O insert line above and edit there
p paste here
P paste above current line
/ find string
n next instance
N previous instance
:i<int> Go to line <int> (:1 goes to first line)
:<up/down arrow> browse history
H first line of the screen
L last line of the screen
M middle line of the screen
a append to the end of the cursor
A append to the end of the current line
r<char> replace cursor selection with <char>
d delete current selection
dd delete current line
x delete current character
v highlight characters
V highlight lines
u undo last change
Ctl + R undo last undo
y copy character or selection to clipboard
yy copy line to clipboard
# highlight and search for current word

See also http://www.tuxfiles.org/linuxhelp/vimcheat.html

Keypress Combinations

Combo Fatality
d^ delete to start of line
d$ delete to end of line
dH delete to first line of screen
dL delete to last line of screen
15dd delete 15 lines
yy5p copy current line and paste it 5 times under current line
3u undo last 3 changes
12b go back 12 words
2w go forward 2 words

Rage Quit

You can append ! to any command to force it to happen.

For example, if opening a read-only file, use :w! to save it and force writing to it.

Or, use :q! to force quit, ignoring any changes you may have made.

You can also use :e! to reopen the file and ignore any changes, essentially starting over.

File Navigation

When accessing the filesystem, you can use tab-completion with any of these commands when looking for a file. For example: :e class.<tab> would cycle through all files starting with class.

Command Action
:e <filename> Open <filename>
:e reload file (fex: in case changed on filesystem)
:E Open file navigation
:w save file
:q quit vim
:x save and quit
:sav <filename> save current buffer as <filename>

Multiple Screens

You can use vim in split mode to edit multiple files at once. Use :sp to split the screen horizontally, or :vsp to split the screen vertically.

You can also open a file at the same time with :sp <filename>

To navigate between panes, exit edit mode and use Ctl + W then an arrow key to move in the direction you'd like to go (up or down, left or right).

To close a current split screen, you can use :clo

Indentation

After selecting some lines using V, use the > and < keys to increase or decrease indentation level. Note that the cursor selection will reset after doing this once.

Background Colors

Vim supports color schemes. Search the Internet to find some.

You can use :set bg=light or :set bg=dark to change the current color scheme to match your terminal background color (black or white).

Use / to search the buffer. Append the string with your search terms. You will need to escape characters like spaces. /the\ time

Helpful Settings

Command Effect
:set ruler Displays line row and column number
:set laststatus=2 Nice little bar that says what file you are editing
:set ai Turn on auto-indenting

You can put all commands you want to startup on default in ~/.vimrc in the same format you would send a command when editing in vim.

Other Cool Stuff

Vim will save anything you put into the clipboard between sessions. Highlight something in one file, exit vim. Come back later, and paste will still work.

You can also get syntax files for vim so that editing files in certain languages or formats (bash, ruby, php, c++, xml, etc.) will highlight everything in the file for you.