Vim''s Flavor
Starting Point Vim has reputation of being hard to use because of its unique and complex way of handling text editing unlike any others editor like Notepad, Notepadd++, Sublime Text. When I first started learning how to use vim I was struggling too much, but once I get pass basic of some commands ...
Starting Point
Vim has reputation of being hard to use because of its unique and complex way of handling text editing unlike any others editor like Notepad, Notepadd++, Sublime Text. When I first started learning how to use vim I was struggling too much, but once I get pass basic of some commands and learned how vim works, all pieces are started to fit together. For basic editing vim build-in functionalities will be enought, but as for larger editing for example when you working programming software's project things are starting to get out of hand. So in the next section I will introduce some vim configuration as well as plugins that can boost your development prodcutivity.
Plugin management
These are some plugin managers that can help you to install and manage plugin in vim: Vundle, Pathogen and Neobundle. You can choose which ever suitable for you.
Files Navigation
NERDTree: this plugin provide tree base file navigation like the following picture.
CtrlP: this plugin provide fuzzy search for file name in the project like following picture.
Ctags: Not really vim plugin but vim support tags functionality that make use of this program. First you need to install ctags with following command.
On Ubuntu
sudo apt-get install exuberant-ctags
On Mac
brew install ctags
Then to generate tags for all source code run the following command and it will generate a new file name tags contain all the tag definition so you can jump back and forth to method or class definition. In vim just position the cursor on method or class name then press CTRL-] to jump to method definition and CTRL-[ to jump back. it really help you locate piece of code quickly
ctags -R .
File information and Git Integration
Vim-GitGutter: this plugin show information about the place that change since last commit with +, - and ~ sign to indicate Added, Deleted and Modified near line number like the following picture.
Vim-Airline: provide status bar in vim that show file, buffer, editing mode as well as git information that tell use which branch that we are working on like above picture show home-page which is a branch that I'm currently on.
Editing extension
Vim-Snipmate: provide code snippet functionalities into vim. And you might want to get this already made snippets from vim-snippets as well. If you don't know what code snippet is? I suggest you do some research on it because it is a real life saver for programmer.
tComment: toggle block comment with east just select block of code with visual selection and press gc then you are done. For more commands checkout the documentation on github.
Rails project specific
vim-rails: this plugin provide really helpful extension commands for rails specific project like extract part of view into partial, easy navigate to rails specific component like controller, model, or view as well as rails commands that can run directly in vim.
Wrap Up
Lets wrap this post up with my personal .vimrc configuration file that I used for my day to day development.
" Vundle configuration set nocompatible set t_Co=256 filetype off set rtp+=~/.vim/bundle/vundle call vundle#begin() Plugin 'scrooloose/nerdtree' Plugin 'bling/vim-airline' Plugin 'kien/ctrlp.vim' Plugin 'airblade/vim-gitgutter' Plugin 'tpope/vim-fugitive' Plugin 'godlygeek/tabular' Plugin 'garbas/vim-snipmate' Plugin 'marcweber/vim-addon-mw-utils' Plugin 'tpope/vim-endwise' Plugin 'tomtom/tlib_vim' Plugin 'tpope/vim-rails' Plugin 'vim-ruby/vim-ruby' Plugin 'tpope/vim-bundler' Plugin 'tpope/vim-cucumber' Plugin 'tpope/vim-haml' Plugin 'skalnik/vim-vroom' Plugin 'vim-scripts/tComment' Plugin 'craigemery/vim-autotag' Plugin 'tpope/vim-surround' Plugin 'Townk/vim-autoclose' Plugin 'johnhamelink/blade.vim' call vundle#end() filetype plugin indent on fun! <SID>StripTrailingWhitespaces() " get current cursor position let l = line(".") let c = col(".") " replace all trailing white space %s/s+$//e " set cursor back to original position call cursor(l, c) endfun " replace all trailing white space before save autocmd BufWritePre * :call <SID>StripTrailingWhitespaces() autocmd BufRead,BufNewFile *.php,*.c,*.cpp,*.java set ts=4 sts=4 sw=4 autocmd BufRead,BufNewFile *.blade.php set ft=html let mapleader=',' noremap , set number set numberawidth=3 set textawidth=80 set wrap set showcmd set showmatch set ruler set wildmenu set visualbell set listchars=tab:▷⋅,trail:· set list set backspace=indent,eol,start set autoindent set ts=2 set sw=2 set sts=2 set et set eol set mouse=a set mousehide set nobackup set noswapfile set incsearch set nohlsearch set background=dark colorscheme solarized " vim-airline set laststatus=2 set encoding=utf-8 let g:airline#extensions#tabline#left_sep = ' let g:airline_left_sep = '»' let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#fnamemod = ':t' let g:airline#extensions#tabline#buffer_idx_mode = 1 let g:airline#extensions#branch#enabled=1 let g:airline_theme = 'luna' nmap <leader>1 <Plug>AirlineSelectTab1 nmap <leader>2 <Plug>AirlineSelectTab2 nmap <leader>3 <Plug>AirlineSelectTab3 nmap <leader>4 <Plug>AirlineSelectTab4 nmap <leader>5 <Plug>AirlineSelectTab5 nmap <leader>6 <Plug>AirlineSelectTab6 nmap <leader>7 <Plug>AirlineSelectTab7 nmap <leader>8 <Plug>AirlineSelectTab8 nmap <leader>9 <Plug>AirlineSelectTab9 nmap <leader>l :bnext<CR> nmap <leader>h :bprevious<CR> nmap <leader>bl :ls<CR> " ctrlp nmap <leader>p :CtrlP<CR> " NERDTree noremap <C-n> :NERDTreeToggle<CR>