Derwent's fork of aimx' Ultimate Vimrc.
I've modified the vimrc to suit my needs as a python / php developer
Here are the original README intro:
Over the last 8 years I have used and tweaked Vim. This is my Ultimate vimrc.
There are two versions:
- Basic: If you want something small just copy 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
I would of course recommend using the awesome version.c
You will need to have a font installed that is patched for powerline to make use of my awesome lightline config: see here for more info. I use Sauce Code in this config but you can replace this with your own font in my_configs.vim.
This does limit compatibility with things outside of mac, and it hasn't been tested on other platforms so just be aware of that.
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 https://github.com/amix/vimrc.git ~/.vim
sh ~/.vim/install_awesome_vimrc.sh
I also recommend using Source Code Pro font from Adobe (it's free and awesome font for writing and programming). The Awesome vimrc is already setup to try to use it
See requirements for info about font stuff
The basic version is basically just one file and no plugins. You can check out 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
sh ~/.vim/install_basic_vimrc.sh
Use msysgit to checkout the repository and run the installation instructions above. No special instructions needed ;-)
If you have vim aliased as vi
instead of vim
, make sure to either alias it: alias vi=vim
. Otherwise, apt-get install vim
Simply just do a git rebase!
cd ~/.vim
git pull --rebase
Colors when editing a Python file:
Opening recently opened files mru.vim:
NERD Tree plugin in a terminal window:
This vimrc even works on Windows!
Distraction free mode using goyo.vim and vim-zenroom2:
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>
- minibufexpl: Mini Buffer Explorer! I much prefer this to BufExplorer. Remapped to
<leader+o>
- NERD Tree: A tree explorer plugin for vim
- ack.vim: Vim plugin for the Perl module / CLI script 'ack'
- ag.vim: A much faster Ack
- 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: 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: Open file under cursor when pressing
gf
- vim-indent-object: Defines a new text object representing lines of code at the same indent level. Useful for python/vim scripts
- vim-multiple-cursors: Sublime Text style multiple selections for Vim, CTRL+N is remapped to CTRL+S (due to YankRing)
- vim-expand-region: Allows you to visually select increasingly larger regions of text using the same key combination.
- vim-fugitive: A Git wrapper so awesome, it should be illegal
- 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
- vim-yankstack: Maintains a history of previous yanks, changes and deletes
- lightline.vim: A light and configurable statusline/tabline for Vim
- auto-pairs: Automatically insert matching pairs of parens etc. can be toggled with
<leader>ap
- vim-unimpaired: Some really useful keybindings for quickly changing options, buffers etc.
- vim-misc: Required for vim-session
- vim-session: Extended session management for Vim
- indentpython: Python indentation
- youcompleteme: Auto completion
- peaksea: My favorite!
- vim-colors-solarized
- vim-irblack
- mayansmoke
- vim-pyte
- vim-coffee-script
- vim-less
- vim-bundle-mako
- vim-markdown
- nginx.vim: Highlights configuration files for nginx
- vim-go
After you have installed the setup you can create ~/.vim/my_configs.vim to fill in any configurations that are important for you. For instance, my my_configs.vim looks like this:
~/.vim (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
git clone git://github.com/tpope/vim-rails.git bundle/vim-rails
Now you have vim-rails installed ;-)
Open bufexplorer and see and manage the current buffers (
Toggle minibufexpl<leader>o
):
map <leader>o :MBEToggle<cr>
Open MRU.vim and see the recently open files (<leader>f
):
map <leader>f :MRU<CR>
Open ctrlp.vim plugin (<leader>j
or <ctrl>f
):
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. (<leader>z
)
map <leader>z :Goyo<cr>
Fast saving of a buffer (<leader>w
):
nmap <leader>w :w!<cr>
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 (<ctrl>j
etc.):
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) (<leader>bd
and (<leader>ba
)):
" 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>
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>
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 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>
$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:
Had to disable because of errors when loading config:
:W
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=
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>
There is an known incompability between miniBufExplorer and vim-sessions,
just hit ,o
,o
every time you open a session that had MiniBufExplorer open when it was last saved and it fixes this.
NERDTree doesn't save CWD in Sessions
Check out my notes for a detailed list of keyboard shortcuts i personally found useful.
Do following:
- Remove
~/.vim
- Remove any lines that refernce
.vim
in your~/.vimrc
- update lightline config to correctly name MiniBufExplorer
- map auto-pairs toggle to ap
- Check if buffer has been edited remotely