|
" vim: ft=vim |
|
let g:CSApprox_verbose_level = 0 |
|
set nocompatible " be iMproved |
|
filetype off " required! |
|
|
|
set rtp+=~/.vim/bundle/Vundle.vim |
|
call vundle#rc() |
|
|
|
" Bundles |
|
Plugin 'gmarik/vundle' |
|
Plugin 'kien/ctrlp.vim' |
|
Plugin 'tpope/vim-fugitive' |
|
Plugin 'tpope/vim-rails.git' |
|
Plugin 'tpope/vim-ragtag' |
|
Plugin 'tpope/vim-endwise' |
|
Plugin 'tpope/vim-surround' |
|
Plugin 'tpope/vim-commentary' |
|
Plugin 'scrooloose/nerdtree' |
|
Plugin 'thoughtbot/vim-rspec' |
|
Plugin 'Lokaltog/powerline', { 'rtp': '$POWERLINE_HOME/bindings/vim/' } |
|
Plugin 'stephenmckinney/vim-solarized-powerline' |
|
Plugin 'terryma/vim-multiple-cursors' |
|
Plugin 'scrooloose/syntastic' |
|
Plugin 'docunext/closetag.vim' |
|
Plugin 'jg/bufexplorer' |
|
Plugin 'plasticboy/vim-markdown' |
|
Plugin 'mattn/gist-vim' |
|
Plugin 'mattn/webapi-vim' |
|
Plugin 'itspriddle/vim-jquery' |
|
Plugin 'hallison/vim-ruby-sinatra' |
|
Plugin 'scrooloose/nerdcommenter' |
|
Plugin 'airblade/vim-gitgutter' |
|
Plugin 'vim-scripts/Conque-Shell' |
|
Plugin 'davidhalter/jedi-vim' |
|
Plugin 'qstrahl/vim-matchmaker' |
|
Plugin 'Shougo/neocomplcache.vim' |
|
Plugin 'klen/python-mode' |
|
Plugin 'hynek/vim-python-pep8-indent' |
|
Plugin 'kevinw/pyflakes-vim' |
|
Plugin 'Blackrush/vim-gocode' |
|
Plugin 'bling/vim-airline' |
|
Plugin 'rking/ag.vim' |
|
Plugin 'garbas/vim-snipmate' |
|
Plugin 'MarcWeber/vim-addon-mw-utils' |
|
Plugin 'tomtom/tlib_vim' |
|
Plugin 'honza/vim-snippets' |
|
Plugin 'vim-scripts/Gundo' |
|
Plugin 'ervandew/supertab' |
|
Plugin 'Raimondi/delimitMate' |
|
Plugin 'jeyb/vim-jst' |
|
Plugin 'pangloss/vim-javascript' |
|
Plugin 'aaronj1335/underscore-templates.vim' |
|
Plugin 'danro/rename.vim' |
|
Plugin 'edsono/vim-matchit' |
|
Plugin 'ekalinin/Dockerfile.vim' |
|
Plugin 'Yggdroot/indentLine' |
|
Plugin 'tfnico/vim-gradle' |
|
Plugin 'tpope/vim-classpath' |
|
Plugin 'ngmy/vim-rubocop' |
|
Plugin 'derekwyatt/vim-scala' |
|
Plugin 'JuliaLang/julia-vim' |
|
|
|
set showcmd "show incomplete cmds down the bottom |
|
set showmode "show current mode down the bottom |
|
set incsearch "find the next match as we type the search |
|
set hlsearch "hilight searches by default |
|
set number |
|
set linespace=4 "add some line space for easy reading |
|
|
|
|
|
"indent settings |
|
set tabstop=2 |
|
set shiftwidth=2 |
|
set softtabstop=2 |
|
set expandtab |
|
set autoindent |
|
|
|
"folding settings |
|
" |
|
" :commands: |
|
" 'za': toggles |
|
" 'zc': closes |
|
" 'zo': opens |
|
" 'zR': open all |
|
" 'zM': close all |
|
" |
|
set foldmethod=indent "fold based on indent |
|
set foldnestmax=3 "deepest fold is 3 levels |
|
set nofoldenable "dont fold by default |
|
|
|
set wildmode=list:longest "make cmdline tab completion similar to bash |
|
set wildmenu "enable ctrl-n and ctrl-p to scroll thru matches |
|
set wildignore=*.o,*.obj,*~ "stuff to ignore when tab completing |
|
|
|
set formatoptions-=o "dont continue comments when pushing o/O |
|
|
|
"vertical/horizontal scroll off settings |
|
set scrolloff=3 |
|
set sidescrolloff=7 |
|
set sidescroll=1 |
|
|
|
"load ftplugins and indent files |
|
filetype plugin on |
|
filetype indent on |
|
|
|
"turn on syntax highlighting |
|
syntax on |
|
|
|
"some stuff to get the mouse going in term |
|
set mouse=a |
|
set ttymouse=xterm2 |
|
|
|
|
|
" PeepOpen uses <Leader>p as well so you will need to redefine it so something |
|
" else in your ~/.vimrc file, such as: |
|
" nmap <silent> <Leader>q <Plug>PeepOpen |
|
|
|
silent! nmap <silent> <Leader>p :NERDTreeToggle<CR> |
|
|
|
|
|
"make <c-l> clear the highlight as well as redraw |
|
nnoremap <C-L> :nohls<CR><C-L> |
|
inoremap <C-L> <C-O>:nohls<CR> |
|
|
|
"map to bufexplorer |
|
nnoremap <leader>b :BufExplorer<cr> |
|
"map to bufergator |
|
let g:buffergator_suppress_keymaps = 1 |
|
nnoremap <leader>bg :BuffergatorToggle<cr> |
|
|
|
"disable resizing when calling buffergator |
|
let g:buffergator_autoexpand_on_split = 0 |
|
|
|
"map Q to something useful |
|
noremap Q gq |
|
|
|
"make Y consistent with C and D |
|
nnoremap Y y$ |
|
|
|
"bindings for ragtag |
|
inoremap <M-o> <Esc>o |
|
inoremap <C-j> <Down> |
|
let g:ragtag_global_maps = 1 |
|
|
|
"mark syntax errors with :signs |
|
let g:syntastic_enable_signs=1 |
|
|
|
"key mapping for vimgrep result navigation |
|
map <A-o> :copen<CR> |
|
map <A-q> :cclose<CR> |
|
map <A-j> :cnext<CR> |
|
map <A-k> :cprevious<CR> |
|
|
|
"key mapping for Gundo |
|
nnoremap <F4> :GundoToggle<CR> |
|
nmap <leader>u :undoToggle<cr> |
|
|
|
|
|
if has("gui_running") |
|
"tell the term has 256 colors |
|
set t_Co=256 |
|
|
|
colorscheme Tomorrow-Night |
|
set guitablabel=%M%t |
|
set lines=40 |
|
set columns=115 |
|
|
|
if has("gui_gnome") |
|
set term=gnome-256color |
|
colorscheme molokai |
|
endif |
|
|
|
if has("gui_mac") || has("gui_macvim") |
|
set guifont=Menlo:h12 |
|
set transparency=7 |
|
endif |
|
|
|
if has("gui_win32") || has("gui_win32s") |
|
set guifont=Consolas:h12 |
|
set enc=utf-8 |
|
endif |
|
else |
|
"dont load csapprox if there is no gui support - silences an annoying warning |
|
let g:CSApprox_loaded = 1 |
|
|
|
"set railscasts colorscheme when running vim in gnome terminal |
|
if $COLORTERM == 'gnome-terminal' |
|
set term=screen-256color |
|
colorscheme molokai |
|
else |
|
if $TERM == 'xterm' |
|
"set term=xterm-256color |
|
colorscheme molokai |
|
else |
|
colorscheme molokai |
|
endif |
|
endif |
|
endif |
|
|
|
"key mapping for window navigation |
|
map <C-h> <C-w>h |
|
map <C-j> <C-w>j |
|
map <C-k> <C-w>k |
|
map <C-l> <C-w>l |
|
|
|
"key mapping for saving file |
|
nmap <C-s> :w<CR> |
|
|
|
"key mapping for tab navigation |
|
nmap <S-Tab> gt |
|
nmap <C-S-Tab> gT |
|
|
|
"Key mapping for textmate-like indentation |
|
nmap <D-[> << |
|
nmap <D-]> >> |
|
vmap <D-[> <gv |
|
vmap <D-]> >gv |
|
|
|
let ScreenShot = {'Icon':0, 'Credits':0, 'force_background':'#FFFFFF'} |
|
|
|
" when press { + Enter, the {} block will expand. |
|
imap {<CR> {}<ESC>i<CR><ESC>O |
|
|
|
" NERDTree settings |
|
nmap wm :NERDTree<cr> |
|
let NERDTreeIgnore=['\.swp$'] |
|
|
|
nnoremap <Esc>A <up> |
|
nnoremap <Esc>B <down> |
|
nnoremap <Esc>C <right> |
|
nnoremap <Esc>D <left> |
|
inoremap <Esc>A <up> |
|
inoremap <Esc>B <down> |
|
inoremap <Esc>C <right> |
|
inoremap <Esc>D <left> |
|
|
|
|
|
if &term =~ '256color' |
|
" Disable background color erase (BCE), see http://goo.gl/SX794N |
|
set t_ut= |
|
endif |
|
|
|
|
|
|
|
" Fonlding settings by Bryan Liles |
|
set foldmethod=indent "fold based on indent |
|
set foldnestmax=10 "deepest fold is 10 levels |
|
set nofoldenable "dont fold by default |
|
set foldlevel=1 "this is just what i use |
|
|
|
|
|
" Rspec.vim mappings |
|
map <Leader>t :call RunCurrentSpecFile()<CR> |
|
map <Leader>s :call RunNearestSpec()<CR> |
|
map <Leader>l :call RunLastSpec()<CR> |
|
map <Leader>a :call RunAllSpecs()<CR> |
|
let g:rspec_command = "!bundle exec rspec --color --format documentation --drb {spec}" |
|
|
|
set t_Co=256 |
|
|
|
|
|
|
|
|
|
"try to make possible to navigate within lines of wrapped lines |
|
nmap <Down> gj |
|
nmap <Up> gk |
|
set fo=l |
|
|
|
"statusline setup |
|
set statusline=%f "tail of the filename |
|
set statusline+=%{fugitive#statusline()} " Git |
|
set statusline+=%{exists('g:loaded_rvm')?rvm#statusline():''} " RVM Options |
|
set statusline+=%= "left/right separator |
|
set statusline+=%c, "cursor column |
|
set statusline+=%l/%L "cursor line/total lines |
|
set statusline+=\ %P "percent through file |
|
set laststatus=2 |
|
" end status line |
|
"turn off needless toolbar on gvim/mvim |
|
set guioptions-=T |
|
"turn off the scroll bar |
|
set guioptions-=L |
|
set guioptions-=r |
|
"recalculate the trailing whitespace warning when idle, and after saving |
|
autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning |
|
|
|
"return '[\s]' if trailing white space is detected |
|
"return '' otherwise |
|
function! StatuslineTrailingSpaceWarning() |
|
if !exists("b:statusline_trailing_space_warning") |
|
if search('\s\+$', 'nw') != 0 |
|
let b:statusline_trailing_space_warning = '[\s]' |
|
else |
|
let b:statusline_trailing_space_warning = '' |
|
endif |
|
endif |
|
return b:statusline_trailing_space_warning |
|
endfunction |
|
|
|
|
|
"return the syntax highlight group under the cursor '' |
|
function! StatuslineCurrentHighlight() |
|
let name = synIDattr(synID(line('.'),col('.'),1),'name') |
|
if name == '' |
|
return '' |
|
else |
|
return '[' . name . ']' |
|
endif |
|
endfunction |
|
|
|
"recalculate the tab warning flag when idle and after writing |
|
autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning |
|
|
|
"return '[&et]' if &et is set wrong |
|
"return '[mixed-indenting]' if spaces and tabs are used to indent |
|
"return an empty string if everything is fine |
|
function! StatuslineTabWarning() |
|
if !exists("b:statusline_tab_warning") |
|
let tabs = search('^\t', 'nw') != 0 |
|
let spaces = search('^ ', 'nw') != 0 |
|
|
|
if tabs && spaces |
|
let b:statusline_tab_warning = '[mixed-indenting]' |
|
elseif (spaces && !&et) || (tabs && &et) |
|
let b:statusline_tab_warning = '[&et]' |
|
else |
|
let b:statusline_tab_warning = '' |
|
endif |
|
endif |
|
return b:statusline_tab_warning |
|
endfunction |
|
|
|
"recalculate the long line warning when idle and after saving |
|
autocmd cursorhold,bufwritepost * unlet! b:statusline_long_line_warning |
|
|
|
"return a warning for "long lines" where "long" is either &textwidth or 80 (if |
|
"no &textwidth is set) |
|
" |
|
"return '' if no long lines |
|
"return '[#x,my,$z] if long lines are found, were x is the number of long |
|
"lines, y is the median length of the long lines and z is the length of the |
|
"longest line |
|
function! StatuslineLongLineWarning() |
|
if !exists("b:statusline_long_line_warning") |
|
let long_line_lens = s:LongLines() |
|
|
|
if len(long_line_lens) > 0 |
|
let b:statusline_long_line_warning = "[" . |
|
\ '#' . len(long_line_lens) . "," . |
|
\ 'm' . s:Median(long_line_lens) . "," . |
|
\ '$' . max(long_line_lens) . "]" |
|
else |
|
let b:statusline_long_line_warning = "" |
|
endif |
|
endif |
|
return b:statusline_long_line_warning |
|
endfunction |
|
|
|
"return a list containing the lengths of the long lines in this buffer |
|
function! s:LongLines() |
|
let threshold = (&tw ? &tw : 80) |
|
let spaces = repeat(" ", &ts) |
|
|
|
let long_line_lens = [] |
|
|
|
let i = 1 |
|
while i <= line("$") |
|
let len = strlen(substitute(getline(i), '\t', spaces, 'g')) |
|
if len > threshold |
|
call add(long_line_lens, len) |
|
endif |
|
let i += 1 |
|
endwhile |
|
|
|
return long_line_lens |
|
endfunction |
|
|
|
"find the median of the given array of numbers |
|
function! s:Median(nums) |
|
let nums = sort(a:nums) |
|
let l = len(nums) |
|
|
|
if l % 2 == 1 |
|
let i = (l-1) / 2 |
|
return nums[i] |
|
else |
|
return (nums[l/2] + nums[(l/2)-1]) / 2 |
|
endif |
|
endfunction |
|
|
|
"define :HighlightLongLines command to highlight the offending parts of |
|
"lines that are longer than the specified length (defaulting to 80) |
|
command! -nargs=? HighlightLongLines call s:HighlightLongLines('<args>') |
|
function! s:HighlightLongLines(width) |
|
let targetWidth = a:width != '' ? a:width : 79 |
|
if targetWidth > 0 |
|
exec 'match Todo /\%>' . (targetWidth) . 'v/' |
|
else |
|
echomsg "Usage: HighlightLongLines [natural number]" |
|
endif |
|
endfunction |
|
|
|
" Strip trailing whitespace |
|
function! <SID>StripTrailingWhitespaces() |
|
" Preparation: save last search, and cursor position. |
|
let _s=@/ |
|
let l = line(".") |
|
let c = col(".") |
|
" Do the business: |
|
%s/\s\+$//e |
|
" Clean up: restore previous search history, and cursor position |
|
let @/=_s |
|
call cursor(l, c) |
|
endfunction |
|
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces() |
|
|
|
" [vim: ft=markdown] |
|
" # Rubocop |
|
" ## Keyboard Shortcuts |
|
" |
|
" > Credit for Shortcuts: [Ack.vim](https://github.com/mileszs/ack.vim) |
|
" |
|
" In the quickfix window, you can use: |
|
" ================================================================== |
|
" > o to open (same as enter) |
|
" > go to preview file (open but maintain focus on ack.vim results) |
|
" > t to open in new tab |
|
" > T to open in new tab silently |
|
" > h to open in horizontal split |
|
" > H to open in horizontal split silently |
|
" > v to open in vertical split |
|
" > gv to open in vertical split silently |
|
" > q to close the quickfix window |
|
" ================================================================== |
|
" |
|
" Additionally, the plugin registers `<Leader>ru` in normal mode for triggering it easily. |
|
" You can disable these default mappings by setting `g:vimrubocop_keymap` in your .vimrc file, and then remap them differently. |
|
" |
|
" For instance, to trigger RuboCop by pressing <Leader>r you can put the following in your .vimrc: |
|
" |
|
" let g:vimrubocop_keymap = 0 |
|
" nmap <Leader>r :RuboCop<CR> |
|
|
|
let g:vimrubocop_config = "$PWD/.rubocop.yml" |