Thanks to these guys:
- Gary Bernhardt,
- Drew Neil,
- Tim Pope,
- and the Janus project.
My configuration uses Pathogen and git submodules. (But you don't need to care about any of that.)
Prerequisites: ruby, git.
- Move your existing configuration somewhere else:
mv ~/.vim* ~/.gvim* my_backup
- Clone this repo into ".vim":
git clone https://github.com/mislav/vimfiles ~/.vim
- Go into ".vim" and run "rake":
cd ~/.vim && rake
This will install "/.vimrc" and "/.gvimrc" symlinks that point to
files inside the ".vim" directory.
-
2 spaces, no tabs
-
incremental, case-insensitive search
-
vertical split goes right, horizontal split goes below
-
cursor keys for movement are disabled!
-
<CR>
- remove highlighting after search -
<Space>
- toggle current fold -
<C-j/k/h/l>
- switch between splits (no need to prepend<C-w>
) -
Q
- format lines -
:KillWhitespace
- strip trailing whitespace
-
,,
alternates between two most recent buffers -
,f
- jump to file:-
,F
- search in directory of current buffer -
,b
- search buffer list -
,gl
- search inlib/
-
,gt
- search tags -
<C-s>
,<C-CR>
- open the selected file in a new split window -
<C-v>
- open the selected file in a new vertical split window -
<C-t>
- open the selected file in a new tab -
<C-j>
- select next file in the file listing -
<C-k>
- select previous file in the file listing -
<C-f>
- flush file cache
-
:Ack -w foo_bar
-
:Ack!
- search, but don't jump to first match :AckFromSearch
-
:AckAdd
- append to existing quickfix list
In the quickfix window:
-
o
- open file -
go
- preview file, i.e. keep focus in quickfix window -
t
(T
) - open in a new tab (silently) -
h
(H
) - open in horizontal split (silently) -
v
(gv
) - open in vertical split (silently)
In the normal buffer:
-
:cn[ext]
/:cN/:cp[revious]
- jump to the next/previous match -
]q
/[q
- same as above, with Unimpaired -
:ccl
- close the quickfix window -
:col[der]
/:cnew[er]
- show results of previous/next search
-
cs"'
- change string from double to single quotes -
ds(
- delete surrounding parentheses -
ysiW]
- surround current WORD with square brackets -
ysst
- surround current line in a HTML tag -
ysip<c-t>
- nest current paragraph in a HTML tag
Visual mode: S
. Insert mode: <c-s>
.
Surround + rails.vim:
-
-
→<% -%>
-
=
→<%= %>
-
#
→<%# %>
-
e
- nest block and appendend
keyword -
E
- likee
, but prompt for text to prepend before block
-
[,
/],
- go to previous/next argument boundary -
<,
/>,
- shift current argument left/right -
a,
/i,
- "an argument"/"inner argument" text object
-
gc{motion}
- comment/uncomment lines that {motion} moves over -
gcc
- comment/uncomment [count] lines -
{Visual}gc
- comment/uncomment the highlighted lines -
gcu
- uncomment the current and adjacent commented lines
Motions:
-
]m
/[m
- next / previous method -
]M
/[M
- end of method definition -
]]
/[[
- next / previous class/module -
][
/[]
- end of class/module
Text objects:
-
am
- a method -
im
- inner method -
aM
- a class -
iM
- inner class
-
:[range]CoffeeCompile [vert]
- compile JavaScript into new buffer -
:CoffeeCompile watch [vert]
- open auto-updating JavaScript buffer -
:[range]CoffeeLint
(needscoffeelint
) -
:[range]CoffeeRun
- run the resulting JavaScript
%
alternates between matching HTML tags, class/control flow statements and
matching end
in Ruby, and more. Also works in visual mode.
In visual mode:
:Tabularize assignment
:Tabularize argument_list
:Tabularize /=>
-
:Gcommit
-
:Gstatus
- jump between lines that represent files with
<c-n>
,<c-p>
-
-
- add/reset file (also in visual mode) -
<Enter>
- open current file in the window below -
o
/S
-:Gsplit
/:Gvsplit
-
p
- add/reset current file with--patch
-
D
-:Gdiff
-
c[v]c
-:Gcommit [--verbose]
-
ca
/cA
---append
/ reuse message
- jump between lines that represent files with
-
:[range]Gbrowse! -
- copy GitHub URL for code that's currently selected -
:[range]Gblame
-
q
/gq
- close blame and return to blamed window / work tree version -
<CR>
- q, then open commit -
o
/O
- open commit in horizontal split / new tab -
-
- reblame at commit -
P
- reblame at parent commit
-
-
:Gedit feature:%
- version of the current file in the "feature" branch -
:Gwrite
-add %
-
:Gread
-checkout %
(also the bailout command after browsing git objects) -
:Gremove
-rm %
-
:Gmove <dest>
-mv % <dest>
-
:Glog
- load past versions of current file into the quickfix list -
:Glog --
- load all commits into the quickfix list -
:Glog -- %
- load only commits that touch the current file -
:Glog --grep={text} --
- only commits that have "text" in the message -
:Glog -S{text} --
- only commits that have "text" in the diff -
:Ggrep {pattern} [branch]
In git objects:
-
<Enter>
- jump to revision under cursor -
o
/S
/O
- jump to revision in a new split / vertical split / tab
In vimdiff view:
-
[c
/]c
- previous/next changeset -
:dp
/:do
-:diffput
/:diffget
- stage/checkout hunk -
:Gwrite
/:Gread
- stage/checkout file -
:do //2
/:do //3
- resolve conflict using the version from target/merge branch -
:diffu[pdate]
- refresh diff highlighting -
:on[ly]
,<C-w>o
- close windows other than the current one
-
[a
/]a
-:previous
/:next
-
[A
/]A
-:first
/:last
-
[q
/]q
-:cprev
/:cnext
-
[Q
/]Q
-:cfirst
/:clast
-
[n
/]n
- previous/next conflict marker -
[<Space>
/]<Space>
- add blank lines above/below the cursor -
[o{opt}
/]o{opt}
/co{opt}
- turn on/turn off/toggle option:-
h
- "hlsearch" -
i
- "ignorecase" -
s
- "spell" -
w
- "wrap"
-
-
yp/P/o/O/I/A
enters insert mode as witha/i/o/O/I/A
and setspaste
. Leaving insert mode sets 'nopaste' automatically.
:Rename[!]
:SudoWrite
:Remove[!]
-
:Find[!] {args}
- runfind
and load results into quickfix - when you create a file that starts with a shebang, it gets
chmod +x
automatically on first save!
-
:Vedit
- quickly open a Vim runtime file:Vsplit
:Vvsplit
:Vtabedit
:Vpedit
:Vread
-
:Runtime
- reload runtime files -
g!
- eval a motion or selection as VimL and replace it with the result
Example:
:Vsp s/pd<Tab>
-
:Tmux [args]
- execute a tmux command -
:[range]Tyank/:Tput [buffer]
- access to tmux buffer -
:[range]Twrite [pane]
-tmux send-keys
to another pane
Examples how to specify a pane: windowtitle.2, top-right, or last; or let it default to the previously given argument.