2012-05-29 17:32:24 -04:00
# The Ultimate vimrc
2012-05-29 12:19:29 -04:00
2012-05-29 17:32:24 -04:00
Over the last 8 years I have used and tweaked Vim. This is my Ultimate vimrc.
There are two versions:
2012-05-29 17:48:36 -04:00
* **Basic**: If you want something small just copy [basic.vim ](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim ) into your ~/.vimrc and you will have a great basic setup
* **Awesome**: This includes a ton of useful plugins, color schemes and configurations
2012-05-29 17:32:24 -04:00
I would of course recommend using the awesome version.
2012-05-30 13:04:21 -04:00
## How to install the Awesome version?
2012-05-29 17:32:24 -04:00
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:
2015-08-11 14:50:01 -04:00
git clone https://github.com/amix/vimrc.git ~/.vim_runtime
2012-05-29 17:32:24 -04:00
sh ~/.vim_runtime/install_awesome_vimrc.sh
2016-01-12 12:02:11 -05:00
The taglist.vim plugin will require ctags (http://ctags.sourceforge.net)
For Debian and Ubuntu:
apt-get install ctags
For Arch Linux:
pacman -S ctags
2015-01-16 04:43:18 -05:00
2013-12-28 16:30:06 -05:00
I also recommend using [Source Code Pro font from Adobe ](http://store1.adobe.com/cfusion/store/html/index.cfm?event=displayFontPackage&code=1960 ) (it's free and awesome font for writing and programming). The Awesome vimrc is already setup to try to use it
2012-05-29 17:32:24 -04:00
2015-03-24 12:53:58 -04:00
## 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
2012-05-30 13:04:21 -04:00
## How to install on Windows?
2012-05-30 12:31:10 -04:00
2012-05-30 13:04:21 -04:00
Use [msysgit ](http://msysgit.github.com/ ) to checkout the repository and run the installation instructions above. No special instructions needed ;-)
2012-05-30 12:31:10 -04:00
2012-08-15 23:22:34 -04:00
## How to update to latest version?
Simply just do a git rebase!
cd ~/.vim_runtime
git pull --rebase
2012-05-29 17:45:13 -04:00
## Some screenshots
Colors when editing a Python file:
![Screenshot 1 ](http://files1.wedoist.com/e952fdb343b1e617b90d256e474d0370/as/screenshot_1.png )
Opening recently opened files [mru.vim ](https://github.com/vim-scripts/mru.vim ):
![Screenshot 2 ](http://files1.wedoist.com/1967b0e48af40e513d1a464e08196990/as/screenshot_2.png )
2012-05-30 12:31:10 -04:00
[NERD Tree ](https://github.com/scrooloose/nerdtree ) plugin in a terminal window:
![Screenshot 3 ](http://files1.wedoist.com/b1509d7ed9e9f357e8d04797f9fad67b/as/screenshot3.png )
2012-05-29 17:45:13 -04:00
2012-05-30 13:04:21 -04:00
This vimrc even works on Windows!
![Screenshot 4 ](http://files1.wedoist.com/4e85163d97b81422240c822c82022f2f/as/screenshot_4.png )
2015-01-01 03:11:57 -05:00
Distraction free mode using [goyo.vim ](https://github.com/junegunn/goyo.vim ) and [vim-zenroom2 ](https://github.com/amix/vim-zenroom2 ):
2013-12-29 08:20:35 -05:00
![Screenshot 5 ](https://d2dq6e731uoz0t.cloudfront.net/a5182977c3d6c2a6cd3f9e97398ca8ca/as/zen_mode.jpg )
2012-05-29 17:45:13 -04:00
2013-12-29 08:25:09 -05:00
## Included Plugins
2012-05-29 17:32:24 -04:00
2012-05-30 13:06:22 -04:00
I recommend reading the docs of these plugins to understand them better. Each of them provide a much better Vim experience!
2012-05-29 17:32:24 -04:00
2012-08-15 23:19:21 -04:00
* [pathogen.vim ](https://github.com/tpope/vim-pathogen ): Manages the runtime path of the plugins
2012-05-29 17:32:24 -04:00
* [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
2012-05-29 17:50:00 -04:00
* [bufexplorer.zip ](https://github.com/vim-scripts/bufexplorer.zip ): Buffer Explorer / Browser. This plugin can be opened with `<leader+o>`
2012-05-29 17:32:24 -04:00
* [NERD Tree ](https://github.com/scrooloose/nerdtree ): A tree explorer plugin for vim
2013-11-16 14:52:29 -05:00
* [ack.vim ](https://github.com/mileszs/ack.vim ): Vim plugin for the Perl module / CLI script 'ack'
2015-07-13 06:22:46 -04:00
* [ag.vim ](https://github.com/rking/ag.vim ): A much faster Ack
2012-05-29 17:50:00 -04:00
* [ctrlp.vim ](https://github.com/kien/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
* [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`
2013-12-28 03:23:35 -05:00
* [zencoding ](https://github.com/mattn/emmet-vim ): Expanding abbreviation like zen-coding, very useful for editing XML, HTML.
2013-04-13 13:54:26 -04:00
* [vim-indent-object ](https://github.com/michaeljsmith/vim-indent-object ): Defines a new text object representing lines of code at the same indent level. Useful for python/vim scripts
* [taglist.vim ](https://github.com/vim-scripts/taglist.vim ): Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc)
2013-04-16 09:27:16 -04:00
* [vim-multiple-cursors ](https://github.com/terryma/vim-multiple-cursors ): Sublime Text style multiple selections for Vim, CTRL+N is remapped to CTRL+S (due to YankRing)
2013-04-14 11:48:31 -04:00
* [vim-expand-region ](https://github.com/terryma/vim-expand-region ): Allows you to visually select increasingly larger regions of text using the same key combination.
2013-11-16 14:45:48 -05:00
* [vim-airline ](https://github.com/bling/vim-airline ): Lean & mean status/tabline for vim that's light as air (replacing powerline)
* [vim-fugitive ](https://github.com/tpope/vim-fugitive ): A Git wrapper so awesome, it should be illegal
2013-12-29 05:37:14 -05:00
* [goyo.vim ](https://github.com/junegunn/goyo.vim ) and [vim-zenroom2 ](https://github.com/amix/vim-zenroom2 ):
Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room [Read more here ](http://amix.dk/blog/post/19744 )
2014-03-02 09:35:00 -05:00
* [vim-commentary ](https://github.com/tpope/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.
2014-07-01 11:11:47 -04:00
* [syntastic ](https://github.com/scrooloose/syntastic ): Syntax checking hacks for vim
2012-05-29 17:32:24 -04:00
2013-12-29 08:25:09 -05:00
## Included color schemes
2012-05-29 17:32:24 -04:00
* [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 )
2013-12-29 08:25:09 -05:00
## Included modes
2012-05-29 17:32:24 -04:00
* [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 )
2012-05-30 13:04:21 -04:00
* [vim-markdown ](https://github.com/tpope/vim-markdown )
2013-04-13 13:54:26 -04:00
* [nginx.vim ](https://github.com/vim-scripts/nginx.vim ): Highlights configuration files for nginx
2014-03-11 16:10:50 -04:00
* [vim-golang ](https://github.com/jnwhiteh/vim-golang )
2012-05-29 17:32:24 -04:00
## How to include your own stuff?
2012-05-30 13:06:22 -04:00
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:
2012-05-29 17:32:24 -04:00
~/.vim_runtime (master)> cat my_configs.vim
map < leader > ct :cd ~/Desktop/Todoist/todoist< cr >
map < leader > cw :cd ~/Desktop/Wedoist/wedoist< cr >
2012-05-30 13:06:22 -04:00
You can also install your own plugins, for instance, via pathogen we can install [vim-rails ](https://github.com/tpope/vim-rails ):
2012-05-29 17:32:24 -04:00
cd ~/.vim_runtime
2013-04-14 11:50:51 -04:00
git clone git://github.com/tpope/vim-rails.git sources_non_forked/vim-rails
2012-05-29 17:32:24 -04:00
Now you have vim-rails installed ;-)
2012-05-29 17:51:17 -04:00
## Key Mappings
2012-05-29 17:32:24 -04:00
### Plugin related mappings
2012-05-30 12:31:10 -04:00
Open [bufexplorer ](https://github.com/vim-scripts/bufexplorer.zip ) and see and manage the current buffers:
2012-05-29 17:32:24 -04:00
map < leader > o :BufExplorer< cr >
2012-05-30 12:31:10 -04:00
Open [MRU.vim ](https://github.com/vim-scripts/mru.vim ) and see the recently open files:
2012-05-29 17:32:24 -04:00
map < leader > f :MRU< CR >
2012-05-30 12:31:10 -04:00
Open [ctrlp.vim ](https://github.com/kien/ctrlp.vim ) plugin:
2012-05-29 17:32:24 -04:00
let g:ctrlp_map = '< c-f > '
2015-03-20 18:31:38 -04:00
Open [PeepOpen ](http://topfunky.github.io/PeepOpen/ ) plugin:
2012-05-29 17:32:24 -04:00
map < leader > j :PeepOpen< cr >
2012-05-30 12:31:10 -04:00
Managing the [NERD Tree ](https://github.com/scrooloose/nerdtree ) plugin:
2012-05-29 17:32:24 -04:00
map < leader > nn :NERDTreeToggle< cr >
map < leader > nb :NERDTreeFromBookmark
map < leader > nf :NERDTreeFind< cr >
2013-12-29 05:37:14 -05:00
[goyo.vim ](https://github.com/junegunn/goyo.vim ) and [vim-zenroom2 ](https://github.com/amix/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.
2013-12-29 04:42:02 -05:00
2013-12-29 05:37:14 -05:00
map < leader > z :Goyo< cr >
2013-12-29 04:42:02 -05:00
2012-05-29 17:32:24 -04:00
### Normal mode mappings
2013-04-14 11:48:31 -04:00
2012-05-29 17:32:24 -04:00
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
2012-05-30 12:31:10 -04:00
Map `<Space>` to `/` (search) and `<Ctrl>+<Space>` to `?` (backwards search):
2012-05-29 17:32:24 -04:00
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
2012-05-30 12:31:10 -04:00
Visual mode pressing `*` or `#` searches for the current selection:
2012-05-29 17:32:24 -04:00
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
2012-05-30 12:31:10 -04:00
$q is super useful when browsing on the command line. It deletes everything until the last slash:
2012-05-29 17:32:24 -04:00
cno $q < C- \>eDeleteTillSlash ()< cr >
2012-05-30 12:31:10 -04:00
Bash like keys for the command line:
2012-05-29 17:32:24 -04:00
cnoremap < C-A > < Home >
cnoremap < C-E > < End >
cnoremap < C-K > < C-U >
cnoremap < C-P > < Up >
cnoremap < C-N > < Down >
2013-04-14 11:48:31 -04:00
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 ](http://vim.wikia.com/wiki/Su-write ):
2013-04-13 13:45:21 -04:00
:W
2012-05-29 17:32:24 -04:00
### Spell checking
Pressing `<leader>ss` will toggle and untoggle spell checking
map < leader > ss :setlocal spell!< cr >
2012-05-30 12:31:10 -04:00
Shortcuts using `<leader>` instead of special chars
2012-05-29 17:32:24 -04:00
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:
2012-05-30 12:31:10 -04:00
`<leader>cc`
2012-05-29 17:32:24 -04:00
To go to the next search result do:
2012-05-30 12:31:10 -04:00
`<leader>n`
2012-05-29 17:32:24 -04:00
To go to the previous search results do:
2012-05-30 12:31:10 -04:00
`<leader>p`
Vimscript mappings:
2012-05-29 17:32:24 -04:00
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 >
## 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 )
2013-12-28 16:17:09 -05:00
* [
2013-12-29 04:38:25 -05:00
Zen room for Vim: Focusing only on the essential](http://amix.dk/blog/post/19744#zenroom-for-Vim-Focsuing-only-on-the-essential)