Over the last 10 years, I have used and tweaked Vim. This configuration is the ultimate vimrc (or at least my version of it).
There are two versions:
- The Basic: If you want something small just copy basic.vim into your ~/.vimrc and you will have a good basic setup
- The Awesome: Includes a ton of useful plugins, color schemes, and configurations
I would, of course, recommend using the awesome version.
Use msysgit to checkout the repository and run the installation instructions above. No special instructions needed ;-)
firest install dependencies: python-dev, python3-dev, ruby-dev, lua-dev, libX11-dev, gtk-dev, gtk2-dev, gtk3-dev, ncurses-dev
git clone [email protected]:vim/vim.git
cd vim/
./configure --with-features=huge --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-perlinterp --with-python-config-dir=/usr/lib/python2.7/config/ --enable-gui=gtk2 --enable-cscope --prefix=/usr
make
sudo make install
git clone https://github.com/acezen/vim.git ~/.vim
ln -s ~/.vimrc ~/.vim/vimrc
cd ~/.vim
git submodule update --init --recursive
Just do a git rebase!
cd ~/.vim
git pull --rebase
Colors when editing a Python file:
Opening recently opened files with the mru.vim plugin:
NERD Tree plugin in a terminal window:
Distraction free mode using goyo.vim and vim-zenroom2:
I recommend reading the docs of these plugins to understand them better. Each plugin provides a much better Vim experience!
ack.vim: Vim plugin forthe_silver_searcher
(ag) or ack -- a wicked fast grep- bufexplorer.zip: Quickly and easily switch between buffers. This plugin can be opened with
<leader+o>
- ctrlp.vim: Fuzzy file, buffer, mru and tag finder. It's mapped to
<Ctrl+F>
goyo.vim and vim-zenroom2:lightline.vim: A light and configurable statusline/tabline for Vim- NERD Tree: A tree explorer plugin for vim
mru.vim: Plugin to manage Most Recently Used (MRU) files. This plugin can be opened with<leader+f>
open_file_under_cursor.vim: Open file under cursor when pressinggf
- pathogen.vim: Manage your vim runtimepath
snipmate.vim: snipmate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vimsyntastic: Syntax checking hacks for vimvim-commentary: Comment stuff out. Usegcc
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.vim-expand-region: Allows you to visually select increasingly larger regions of text using the same key combinationvim-fugitive: A Git wrapper so awesome, it should be illegalvim-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-yankstack: Maintains a history of previous yanks, changes and deletesRemove all clutter and focus only on the essential. Similar to iA Writer or Write Room Read more here
- gruvbox: The default
- vim-colors-solarized
peakseavim-irblackmayansmokevim-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_runtime/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 plugins, for instance, via pathogen you can install vim-rails:
cd ~/.vim
git clone git://github.com/tpope/vim-rails.git sources_non_forked/vim-rails
The Leader is ,
, so whenever you see <Leader>
it means ,
.
<!-- map <leader>bl :BufExplorer<cr> -->
<!-- map <leader>f :MRU<CR> -->
Open minibufexpl to see and manage the current buffers (<leader>o
):
map <leader>bl :BufExplorer<cr>
Open ctrlp.vim plugin to quickly find a file or a buffer (<leader>j
or <ctrl>f
):
let g:ctrlp_map = '<c-f>'
NERD Tree mappings:
map <leader>nn :NERDTreeToggle<cr>
map <leader>nb :NERDTreeFromBookmark
map <leader>nf :NERDTreeFind<cr>
MardownPreview mappings:
map <C-m> <Plug>MarkdownPreview
map <C-Tab> :MBEbn<cr>
map <C-S-Tab> :MBEbp<cr>
<!-- map <leader>z :Goyo<cr> -->
Fast saving of a buffer (<leader>w
):
nmap <leader>w :w!<cr>
Map <Space>
to /
(search) and <Shift>+<Space>
to ?
(backwards search):
map <space> /
map <shift-space> ?
Disable highlights when you press <leader><cr>
:
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
Smart way to move between buffer:
map <leader>bn :MBEbn<cr>
map <leader>bp :MBEbp<cr>
Closing of the 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>
<!-- map <leader>g :Ack -->
Open CtrlSF for fast search:
nnoremap <leader>g :CtrlSF<cr>
Quickly open a buffer for scripbble:
map <leader>q :e ~/buffer<cr>
Toggle paste mode on and off:
map <leader>pp :setlocal paste!<cr>
Open CtrlP use buffer search mode:
map <c-b> :CtrlPBuffer<cr>
Open Markdown Preview:
map <c-m> <Plug>MarkdownPreview
Insert Doxygen comment:
nnoremap <leader>do :Dox<cr>
Swith between header file and implement file:
nnoremap <silent> <leader>sw :FSHere<cr>
Jump to Declaration and Definition:
nnoremap <Leader>jc :YcmCompleter GoToDeclaration<cr>
nnoremap <Leader>jd :YcmCompleter GoToDefinition<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 Ack.vim
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>
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>
$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 (works only on Unix). Super useful when you open a file and you don't have permissions to save your changes. Vim tip:
:W
Pressing <leader>ss
will toggle spell checking:
map <leader>ss :setlocal spell!<cr>
Shortcuts using <leader>
instead of special characters:
map <leader>sn ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=
Query :help cope
if you are unsure what cope is. It's super useful!
When you search with Ack.vim
, 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
Cope 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>
Just do following:
- Remove
~/.vim
- Remove any lines that reference
.vim
in your~/.vimrc