mission vim possible-full

39
Mission Vim-Possible by Sam Gottfried

Upload: sam-gottfried

Post on 08-Aug-2015

388 views

Category:

Documents


0 download

TRANSCRIPT

Mission Vim-Possibleby Sam Gottfried

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

Text Objects

a = a/ani = inside

aw -> a wordaW -> a WORD

as -> a sentence

ap -> a paragraph

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

More Plugins

Supertab -> Easier autocompletegithub.com/ervandew/supertab

Vimrc

Configuration for Vim

Resources

:vimtutor

:help <topic>

Practical Vim (from pragmatic bookshelf)

Vimcasts (http://vimcasts.org)