Skip to content
The ultimate Vim configuration: vimrc
Branch: master
Clone or download
Pull request Compare This branch is 40 commits ahead, 209 commits behind amix:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
sources
temp_dirs
vimrcs
.gitignore
.gitmodules
README.md
install_vimrc.sh

README.md

The Ultimate vimrc by Brandon Giesing

Based off of amix's Ultimate vimrc

How to install

This vimrc includes a lot of great plugins and configurations that make Vim a lot better. To install it simply do following:

git clone git://github.com/bgiesing/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_vimrc.sh

How to install on Windows?

Use msysgit to checkout the repository and run the installation instructions above. No special instructions needed ;-)

How to update to latest version?

Simply just do a git rebase and submodule update!

cd ~/.vim_runtime
git pull --rebase
git submodule update

Some screenshots

Colors when editing a Python file: Screenshot 1

Opening recently opened files mru.vim: Screenshot 2

NERD Tree plugin in a terminal window: Screenshot 3

This vimrc even works on Windows! Screenshot 4

Distraction free mode using goyo.vim and vim-zenroom2: Screenshot 5

Included Plugins

I recommend reading the docs of these plugins to understand them better. Each of them provide a much better Vim experience!

  • pathogen.vim: Manages the runtime path of the plugins
  • snipMate.vim: snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim
  • bufexplorer.zip: Buffer Explorer / Browser. This plugin can be opened with <leader+o>
  • NERD Tree: A tree explorer plugin for vim
  • ctrlp.vim: Fuzzy file, buffer, mru and tag finder. In my config it's mapped to <Ctrl+F>, because <Ctrl+P> is used by YankRing
  • zencoding: Expanding abbreviation like zen-coding, very useful for editing XML, HTML.
  • vim-airline: Lean & mean status/tabline for vim that's light as air (replacing powerline)
  • goyo.vim and vim-zenroom2: Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room Read more here
  • vim-commentary: Comment stuff out. Use gcc to comment out a line (takes a count), gc to comment out the target of a motion. gcu uncomments a set of adjacent commented lines.
  • syntastic: Syntax checking hacks for vim

Included color schemes

Included modes

How to include your own stuff?

After you have installed the setup you can create ~/.vim_runtime/my_configs.vim to fill in any configurations that are important for you. For instance, my my_configs.vim looks like this:

~/.vim_runtime (master)> cat my_configs.vim
map <leader>ct :cd ~/Desktop/Todoist/todoist<cr>
map <leader>cw :cd ~/Desktop/Wedoist/wedoist<cr>

You can also install your own plugins, for instance, via pathogen we can install vim-rails:

cd ~/.vim_runtime
git submodule add git://github.com/tpope/vim-rails.git sources/vim-rails

Now you have vim-rails installed ;-)

Key Mappings

Plugin related mappings

Open bufexplorer and see and manage the current buffers:

map <leader>o :BufExplorer<cr>

Open ctrlp.vim plugin:

let g:ctrlp_map = '<c-f>'

Managing the NERD Tree plugin:

map <leader>nn :NERDTreeToggle<cr>
map <leader>nb :NERDTreeFromBookmark
map <leader>nf :NERDTreeFind<cr>

goyo.vim and vim-zenroom2 lets you only focus on one thing at a time. It removes all the distractions and centers the content. It has a special look when editing Markdown, reStructuredText and textfiles. It only has one mapping.

map <leader>z :Goyo<cr>

Normal mode mappings

Fast saving of a buffer:

nmap <leader>w :w!<cr>

Treat long lines as break lines (useful when moving around in them):

map j gj
map k gk

Map <Space> to / (search) and <Ctrl>+<Space> to ? (backwards search):

map <space> /
map <c-space> ?
map <silent> <leader><cr> :noh<cr>

Disable highlight when <leader><cr> is pressed:

map <silent> <leader><cr> :noh<cr>

Smart way to move between windows:

map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

Closing of current buffer(s):

" Close current buffer
map <leader>bd :Bclose<cr>

" Close all buffers
map <leader>ba :1,1000 bd!<cr>

Useful mappings for managing tabs:

map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove

" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/

Switch CWD to the directory of the open buffer:

map <leader>cd :cd %:p:h<cr>:pwd<cr>

Open vimgrep and put the cursor in the right position:

map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>

Vimgreps in the current file:

map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>

Remove the Windows ^M - when the encodings gets messed up:

noremap <leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm

Quickly open a buffer for scripbble:

map <leader>q :e ~/buffer<cr>

Toggle paste mode on and off:

map <leader>pp :setlocal paste!<cr>

Insert mode mappings

Quickly insert parenthesis/brackets/etc.:

inoremap $1 ()<esc>i
inoremap $2 []<esc>i
inoremap $3 {}<esc>i
inoremap $4 {<esc>o}<esc>O
inoremap $q ''<esc>i
inoremap $e ""<esc>i
inoremap $t <><esc>i

Insert the current date and time (useful for timestamps):

iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr>

Visual mode mappings

Visual mode pressing * or # searches for the current selection:

vnoremap <silent> * :call VisualSelection('f')<CR>
vnoremap <silent> # :call VisualSelection('b')<CR>

When you press gv you vimgrep after the selected text:

vnoremap <silent> gv :call VisualSelection('gv')<CR>

When you press <leader>r you can search and replace the selected text:

vnoremap <silent> <leader>r :call VisualSelection('replace')<CR>

Surround the visual selection in parenthesis/brackets/etc.:

vnoremap $1 <esc>`>a)<esc>`<i(<esc>
vnoremap $2 <esc>`>a]<esc>`<i[<esc>
vnoremap $3 <esc>`>a}<esc>`<i{<esc>
vnoremap $$ <esc>`>a"<esc>`<i"<esc>
vnoremap $q <esc>`>a'<esc>`<i'<esc>
vnoremap $e <esc>`>a"<esc>`<i"<esc>

Command line mappings

$q is super useful when browsing on the command line. It deletes everything until the last slash:

cno $q <C-\>eDeleteTillSlash()<cr>

Bash like keys for the command line:

cnoremap <C-A>      <Home>
cnoremap <C-E>      <End>
cnoremap <C-K>      <C-U>

cnoremap <C-P> <Up>
cnoremap <C-N> <Down>

Write the file as sudo (only on Unix). Super useful when you open a file and you don't have permissions to save your changes. Vim tip:

:W

Spell checking

Pressing <leader>ss will toggle and untoggle spell checking

map <leader>ss :setlocal spell!<cr>

Shortcuts using <leader> instead of special chars

map <leader>sn ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=

Cope

Do :help cope if you are unsure what cope is. It's super useful!

When you search with vimgrep, display your results in cope by doing: <leader>cc

To go to the next search result do: <leader>n

To go to the previous search results do: <leader>p

Vimscript mappings:

map <leader>cc :botright cope<cr>
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
map <leader>n :cn<cr>
map <leader>p :cp<cr>
You can’t perform that action at this time.