mission vim possible-full
TRANSCRIPT
History of Vim
"In the beginning, there was ed. And ed begat ex; and ex begat vi; and vi begat vim."
What is Vim?
● Vim is a highly customizable, highly efficient text editor
● Vim has several modes○ Normal ○ Insert○ Visual○ Ex mode
Starting Up Vim
$ vim -> starts Vim$ vim file.txt -> Starts Vim and opens file.txt$ vim . -> Starts vim and opens to the current directory$ mvim . -> Starts Macvim in the current directory
Normal Mode
Normal Mode is the default mode in Vim.
You should spend most of your time in normal mode.
How to Get Around
h -> move leftj -> move downk -> move upl -> move right<C-f> Move a page down<C-b> Move a page upgg -> move to the top of a fileG -> move to the bottom of a file
Motions
words vs WORDSdef foo(a,b)
word: [def][foo][(][a][,][b][)]WORD: [def][foo(a,b)]
w -> next word e -> end of wordW -> next WORD E -> end of WORD
b-> beginning of current wordB -> beginning of current WORD
More Motions
f -> find a character F -> find a character (reverse)
t -> go to just before a characterT -> go to just after a character (reverse)
; -> next match (for f/F/t/T), -> previous match (for f/F/t/T)
More Motions
/ -> search forward? -> search backwardsn -> next match (current direction)N -> previous match (current direction)
* -> search for word under the cursor# -> search backwards for word under the cursor
Linewise Motions
0 -> go to beginning of a line^ -> first non-whitespace character of a line
$ -> end of line
Operator
y -> yankd -> deletec -> change
p -> paste (after)P -> paste (before)
Operator + motion = actiondw -> delete to the next word
More Text Objects
a( -> a pair of parenthesis
a{ -> a pair of {braces}
a[ -> a pair of [brackets]
a< -> a pair of <angle brackets>
at -> a pair of XML tags
More Text Objects
a" -> a pair of "quotes"a' -> a pair of 'quotes'
Examples:da" -> delete a pair of quotesci" -> change everything between the quotesyap -> yank a paragraph
Line-wise operations
dd -> delete a linecc -> change a lineyy -> yank a line (copy)
>> -> shift right<< -> shift left== -> auto indent
Counts
Most motions take a count3w -> move ahead 3 words5s -> move ahead 3 sentences
These can be combined with actions3dw -> delete a word 3 times (or d3w)5dd -> delete 5 lines2yy -> yank 2 lines
Undo/Redo
Act, Repeat, Reverse
. -> repeat a changeu -> undo a change
- Chunk your Undos- Compose repeatable changes- Don't count if you can repeat
Insert Mode
Entering Insert Modei -> insert to the left of the cursora -> insert to the right of the cursor (append)c -> change (usually combined with a motion)
I -> Insert at the beginning of the current lineA -> Append to the end of the current linecc -> change the current line
Insert Mode Commands
<C-w> -> delete back one world<C-u> -> delete back to start of line<C-r>{register} -> paste from register
Getting Out of Insert Mode<Esc> or <C-[>
Visual Mode
v -> character-wise Visual modeV -> line-wise Visual mode<C-v> -> block-wise Visual modegv -> re-selects last visual selection
You can switch between these without going into normal mode
Ex mode
: -> enter Ex commandQ -> enter Ex mode (:visual to get out)
:[range]d[elete] [x] -> deletes specified lines into register x:[range]y[ank] [x] -> yanks specified lines into register x:[line]put [x] -> puts the text from register x after [line]
More Ex mode commands:[range]copy [address] -> Copy the lines in [range] to below the line given by [address]
:[range]m[ove] [address] -> Move the lines in [range] to below the line given by [address]
:[range]join -> Join the specified lines:[range]normal {commands} -> run normal mode {commands} on each line in [range]
More Ex mode commands
:[range] substitute/{pattern}/{string} -> replace occurences of {pattern} with {string} on each specified line
:[range] g[lobal]/{pattern}/[command] -> run [command] on every line that matches {pattern}
:[range]v[global]/{pattern}/[command] -> run [command] on every line that does NOT match {pattern}
i.e :g/re/p
Ex Mode Examples
:5 -> go to line 5:5p -> print line 5:$ -> go to last line:2,5p -> print lines 2-5:% -> the whole document:. -> the current line:2,5t. -> copy lines 2 to 5 to below the current line:7,8m3 -> move lines 7-8 to below line 3
Opening Files
:e <file> -> open <file>:w <file> -> write <file>:saveas <file> -> write to (and open) <file>
:q -> quit current window:qa -> quit all windows:wq -> write then quit:x -> write and quit (if changes have been made)
Windows
<C-w>s or :sp -> Split the current window horizontally
<C-w>v or :vs -> Split the current window vertically
Both :sp and :vs take an optional file name
More Window Commands
<C-w>c or :close -> close the active window<C-w>o or :only -> close all other windows<C-w>= -> equalize the width and height of all windows
<C-w>> or :resize +n -> increase size of window to the right
<C-w>< or :resize -n -> increase size of window to the left
Registers
Use registers with yanks and deletesIncrease your clipboard size to 27!
"[register][count]action text object
example:"ayiw => Yank current word into register a"ap => Paste from register a
Macros
Record a sequence of changes and then play them back
q{register} -> record a macro into a registerqa -> start recording a macro into register a
Press q again to stop the recording@{register} -> playback the macro in {register}
Macro Tips
Macros can be done in series
Macros can also be done in parallel
Macros are useful with counts (Dot command doesn't accept counts)
Searching
/ -> search? -> search (backwards)
Flags\c -> case insensitive\v -> Perl (or Ruby) style regex ("Very magic mode")\V -> Literal Search or "Very No Magic" mode
<word> -> explicit word boundaries (in very magic mode)\zsmatch\ze -> match boundaries (in very magic mode)
Searching
? needs to be escaped when searching backwards
\ needs to be escaped all the time (even in Very Nomagic mode)
// -> Your last search termThis can be used as a text object or in a substitute command
Substitution
:[range]s[ubstitute]/{pattern}/{string}/{flags}
examples
:%s/hello/hi/g -> replaces all occurrences of the word "hello" with the word "hi"
:%s/hello/hi/gc -> does the same thing but prompts at each map
Plugins
Tim Pope's Pathogen - Plugin Managergithub.com/tpope/vim-pathogen
Vim-Railsgithub.com/tpope/vim-rails
Ruby-Testgithub.com/janx/vim-rubytest
More Plugins
NERDTree -> File tree explorergithub.com/scrooloose/nerdtree
Fugitive -> Git from within Vimgithub.com/tpope/vim-fugitive
Greplace -> Project search and replacegithub.com/skwp/greplace.vim
More Plugins
Ack.vim -> Search project with Ackgithub.com/mileszs/ack.vim
Ultisnips -> Textmate-like snippetsgithub.com/SirVer/ultisnips
Ctrlp -> Fuzzy find filesgithub.com/kien/ctrlp.vim