This is a reference written by my as I'm using VIM A good reference to check for more would be: [This](https://gist.github.com/tuxfight3r/0dca25825d9f2608714b) # Vim Reference This is intended as a brief reference for beginners. Vim does have a built in reference for each key, that can be accessed via :h # Basics ## Inserting Text `i` - Insert Text at the cursor `a` - Append Text after the cursor `I` - Insert text at the beginning of the line `A` - Insert text at the end of the line `o` - Insert a new line below the current line `O` - Inserts a new line above the current line ## Saving and Quitting `esc` - Pressing escape will put you in normal mode, then pressing `:` will put you into command mode `:w` - Write to file `:q` - Quit file `ZZ` - Write and quit (`:wq`) `ZQ` - Force quit (`:q!`) # Motions for Movement Motions can also be used with other commands, such as dw to delete to next word or while selecting a visual block. Vim reference `:h motion.txt` `h,l` - Left, Right `j,k` - Down, Up `0` - Jump to the beginning of the line `$` - Jump up the end of the line `gg` - Jump to the top of the file `G` - Jump to the bottom of the file `:5` - Jump to line 5 `{ }` - Jump up and down paragraphs `w` - Beginning of next word `e` - End of next word `b` - Beginning of last word `5w` - Move forwards 5 words, this also works with most commands `f` - Moves to the next occurance of that character, good for quotes `%` - Jump to matching parenthesis, either forwards or back # Visual Selection Visually highlight the selection being made `v` - Select characters `V` - Select entire lines `Ctrl + v` - Visual block selection Visual mode, can also be used with motions `vi(` - Visually select the inside of some parenthesis `va{` - Visual select the the {} and their contents # Deleting and Clipboard Deleting, yanking, and pasting. Like other commands, can use motions too! `x` - Delete/cut character under cursor `d` - Delete/cut selection `dd` - Delete the line `d5d` - Delete 5 lines `d$` - Delete to end of the line `y` - Yank/copy selection `yy` - Yank the line `p` - Put/Paste at cursor `P` - Put/Paste after cursor # Editor Readibility(?) `zz` - Center the current line in the editor `zt` - Align the current line to the top of VIM `zb` - Align the current line to the bottom of VIM # Search `/` - Search forwards `?` - Search backwards `n` - Next search result `N` - Previous search result # Replace/Change/Substitute ## Replace `r` - Replaces the whatever is at the cursor with the character `R` - Replace mode. This enters an insert mode that writes over everything. ## Change The more powerful alternative of replace `c` - Change. This will delete the selection, and put you into insert mode Yet again, this command can make use of, and gets its power from motions! `cw` - Change word `c$` - Change contents to the end of the line `ci(` - Change inside ( { " `caw` - Change around word. Alternative to `b cw` ## Substitute This is the "change and replace" of vim. It makes use of regex. `:s/x/y` - Replace the first instance of x to y on the selected line `:s/x/y/g` - Replace globally all instances of x to y on the current line. `:%s/x/y/g` - Replace all instances of x to y on each line `:s/x/y/gc` - Replace all instances on the line, but prompt for each change # Cool stuff `.` - Repeats the last command. Eg. ci( will occur again # Tabs, Buffers, Splits Multitasking Vim can open numerous files/buffers at the same time. These can be in tabs, buffers, or in a splitscreen view. ## Tabs Tabs are used like workspaces. To keep tasks associated, from there you have multiple buffers. `:tabedit ` - Open a file in a new tab `:tabe new` - Open a blank tab `gt` - Switch to next tab `gT` - Switch to previous tab `gt` - Switch to tab x `CTRL+W T` - Breakout current window/split into a new tab `CTRL+w gf` - Open new tab to file under cursor ## Buffers Buffers are used as file proxies. These are to keep the files accessable. `:r` `:e filenam` `:bn` `:bp` `:bd` `:ls` - Shows the buffers `:b1..9` - Switch to buffer number `Ctrl+6` - Switches between the buffers `#Ctrl+6` - Switches to the buffer number `bd` - Delete current buffer, fails if there are any changes `bd!` - Delete current buffer, discarding changes ## Splits/Windows Windows are used to compare files, or work on one file while referencing another. `:split ` - Horizontally split the window `:vs` - Vertically split the window `Ctrl + ww` - Cycle between active splits `Ctrl+W hjkl` - Cycle between active splits with vimkeys `Ctrl + wr` - Switch the splits around # Setting variables in Vim Vim has extra features disabled by default, that can be very useful! `:set lines` - This adds line numbers `:syntax on` - Turns syntax highlighting on `:set hidden` - Allows you to switch between buffers without writing. These variables can be added into a file called ~/.vimrc to automatically run every time vim opens.