Mislav's vim configuration
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.)
Installation:
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.
Features:
vimrc
-
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
File switching (Command-T)
,,
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
: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
Surround
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 appendend
keywordE
- likee
, but prompt for text to prepend before block
Argumentative
[,
/],
- go to previous/next argument boundary<,
/>,
- shift current argument left/righta,
/i,
- "an argument"/"inner argument" text object
Commentary
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
ruby.vim
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
CoffeeScript
:[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
matchit.vim
%
alternates between matching HTML tags, class/control flow statements and
matching end
in Ruby, and more. Also works in visual mode.
Tabular
In visual mode:
:Tabularize assignment
:Tabularize argument_list
:Tabularize /=>
Fugitive
-
: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
/: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 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
Unimpaired
-
[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.
Eunuch
: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!
Scriptease
: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>
Tbone
: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.