# The Ultimate vimrc Over the last 8 years I have used and tweaked Vim. This is my Ultimate vimrc. There are two versions: * **Basic**: which is located at [basic.vim](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim). If you want something small just copy this into your ~/.vimrc and you will have a great basic setup * **Awesome**: this includes a ton of useful plugins, color schemes and configurations etc. I would of course recommend using the awesome version. ## How to install the Basic version The basic version is basically just one file and no plugins. You can check out [basic.vim](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim). This is useful to install on remote servers where you don't need many plugins and you don't do many edits. git clone git://github.com/amix/vimrc.git ~/.vim_runtime sh ~/.vim_runtime/install_basic_vimrc.sh ## How to install the Awesome version The awesome version includes a lot of great plugins, configurations and color schemes that make Vim a lot better. To install it simply do following: git clone git://github.com/amix/vimrc.git ~/.vim_runtime sh ~/.vim_runtime/install_awesome_vimrc.sh ## What plugins are included? I recommend reading the docs of each of these plugins to understand them better. Each of them provide a much better Vim experience! * [pathogen.vim](https://github.com/tpope/vim-pathogen): Manages the runtime path of the plugins (this and git submodules) * [YankRing](https://github.com/vim-scripts/YankRing.vim): Maintains a history of previous yanks, changes and deletes * [snipMate.vim](https://github.com/garbas/vim-snipmate): snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim * [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Buffer Explorer / Browser. This plugin can be opened with **leader+o** * [NERD Tree](https://github.com/scrooloose/nerdtree): A tree explorer plugin for vim * [ack.vim](github.com/mileszs/ack.vim): Vim plugin for the Perl module / CLI script 'ack' * [vim-powerline](https://github.com/Lokaltog/vim-powerline): The ultimate vim statusline utility * [ctrlp.vim](https://github.com/kien/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. In my config it's mapped to ****, because **** is used by YankRing * [mru.vim](https://github.com/vim-scripts/mru.vim): Plugin to manage Most Recently Used (MRU) files. Includes my own fork which adds syntax highlighting to MRU. This plugin can be opened with **leader+f** * [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Open file under cursor when pressing **gf** ## What color schemes are included? * [peaksea](https://github.com/vim-scripts/peaksea): My favorite! * [vim-colors-solarized](https://github.com/altercation/vim-colors-solarized) * [vim-irblack](https://github.com/wgibbs/vim-irblack) * [mayansmoke](https://github.com/vim-scripts/mayansmoke) * [vim-pyte](https://github.com/therubymug/vim-pyte) ## What modes are included? * [vim-coffee-script](https://github.com/kchmck/vim-coffee-script) * [vim-less](https://github.com/groenewege/vim-less) * [vim-bundle-mako](https://github.com/sophacles/vim-bundle-mako) ## 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 for. For instance, my **my_configs.vim** looks like this: ~/.vim_runtime (master)> cat my_configs.vim map ct :cd ~/Desktop/Todoist/todoist map cw :cd ~/Desktop/Wedoist/wedoist You can also install your own plugins, for instance, via pathogen: cd ~/.vim_runtime git clone git://github.com/tpope/vim-rails.git sources_plugins/vim-rails Now you have vim-rails installed ;-) ### Plugin related mappings Open bufexplorer and see and manage the current buffers: map o :BufExplorer Open MRU.vim and see the recently open files: map f :MRU Open ctrlp.vim plugin: let g:ctrlp_map = '' Open peepopen plugin: map j :PeepOpen NERDTree: map nn :NERDTreeToggle map nb :NERDTreeFromBookmark map nf :NERDTreeFind ### Normal mode mappings Fast saving of a buffer: nmap w :w! Treat long lines as break lines (useful when moving around in them): map j gj map k gk Map to / (search) and Ctrl- to ? (backwards search): map / map ? map :noh Disable highlight when `` is pressed: map :noh Smart way to move between windows: map j map k map h map l Closing of current buffer(s): " Close current buffer map bd :Bclose " Close all buffers map ba :1,1000 bd! Useful mappings for managing tabs: map tn :tabnew map to :tabonly map tc :tabclose map tm :tabmove " Opens a new tab with the current buffer's path " Super useful when editing files in the same directory map te :tabedit =expand("%:p:h")/ Switch CWD to the directory of the open buffer: map cd :cd %:p:h:pwd Open vimgrep and put the cursor in the right position: map g :vimgrep // **/*. Vimgreps in the current file: map :vimgrep // % Remove the Windows ^M - when the encodings gets messed up: noremap m mmHmt:%s///ge'tzt'm Quickly open a buffer for scripbble: map q :e ~/buffer Toggle paste mode on and off: map pp :setlocal paste! ### Insert mode mappings Quickly insert parenthesis/brackets/etc.: inoremap $1 ()i inoremap $2 []i inoremap $3 {}i inoremap $4 {o}O inoremap $q ''i inoremap $e ""i inoremap $t <>i Insert the current date and time (useful for timestamps): iab xdate =strftime("%d/%m/%y %H:%M:%S") ### Visual mode mappings Visual mode pressing * or # searches for the current selection: vnoremap * :call VisualSelection('f') vnoremap # :call VisualSelection('b') When you press gv you vimgrep after the selected text: vnoremap gv :call VisualSelection('gv') When you press `r` you can search and replace the selected text: vnoremap r :call VisualSelection('replace') Surround the visual selection in parenthesis/brackets/etc.: vnoremap $1 `>a)` vnoremap $2 `>a]` vnoremap $3 `>a}` vnoremap $$ `>a"` vnoremap $q `>a'` vnoremap $e `>a"` ### Command line mappings $q is super useful when browsing on the command line. It deletes everything until the last slash. cno $q eDeleteTillSlash() Bash like keys for the command line cnoremap cnoremap cnoremap cnoremap cnoremap ### Spell checking Pressing `ss` will toggle and untoggle spell checking map ss :setlocal spell! Shortcuts using instead of special chars map sn ]s map sp [s map sa zg map 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: * `cc` To go to the next search result do: * `n` To go to the previous search results do: * `p` map cc :botright cope map co ggVGy:tabnew:set syntax=qfpgg map n :cn map p :cp ## Useful blog tips regarding my Vim setup * [Vim: Annotate strings with gettext (the macro way)](http://amix.dk/blog/post/19678#Vim-Annotate-strings-with-gettext-the-macro-way) * [vimgrep: Searching through multiple file extensions](http://amix.dk/blog/post/19672#vimgrep-Searching-through-multiple-file-extensions) * [Filtering through vimgrep results using regular expressions](http://amix.dk/blog/post/19666#Filtering-through-vimgrep-results-using-regular-expressions) * [PeepOpen - File auto completion for Mac editors](http://amix.dk/blog/post/19601#PeepOpen-File-auto-completion-for-Mac-editors) * [Vim 7.3: Persistent undo and encryption!](http://amix.dk/blog/post/19548#Vim-7-3-Persistent-undo-and-encryption) * [Vim tips: Visual Search](http://amix.dk/blog/post/19334#Vim-tips-Visual-Search) * [Folding in Vim](http://amix.dk/blog/post/19132#Folding-in-Vim)