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 |
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).
Search
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.