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 filego- preview file, i.e. keep focus in quickfix windowt(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 quotesds(- delete surrounding parenthesesysiW]- surround current WORD with square bracketsysst- surround current line in a HTML tagysip<c-t>- nest current paragraph in a HTML tag
Visual mode: S. Insert mode: <c-s>.
Surround + rails.vim:
-→<% -%>=→<%= %>#→<%# %>e- nest block and appendendkeywordE- likee, but prompt for text to prepend before block
[,/],- go to previous/next argument boundary<,/>,- shift current argument left/righta,/i,- "an argument"/"inner argument" text object
gc{motion}- comment/uncomment lines that {motion} moves overgcc- comment/uncomment [count] lines{Visual}gc- comment/uncomment the highlighted linesgcu- 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 methodim- inner methodaM- a classiM- 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 belowo/S-:Gsplit/:Gvsplitp- add/reset current file with--patchD-:Gdiffc[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]Gblameq/gq- close blame and return to blamed window / work tree version<CR>- q, then open commito/O- open commit in horizontal split / new tab-- reblame at commitP- 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 cursoro/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/Aenters insert mode as witha/i/o/O/I/Aand setspaste. Leaving insert mode sets 'nopaste' automatically.
:Rename[!]:SudoWrite:Remove[!]:Find[!] {args}- runfindand load results into quickfix- when you create a file that starts with a shebang, it gets
chmod +xautomatically on first save!
:Vedit- quickly open a Vim runtime file:Vsplit:Vvsplit:Vtabedit:Vpedit:Vread
:Runtime- reload runtime filesg!- 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-keysto another pane
Examples how to specify a pane: windowtitle.2, top-right, or last; or let it default to the previously given argument.