set encoding=utf-8
set fileencoding=utf-8

set nocompatible
filetype off


" set the runtime path to include vundle and initialize

" *nix
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Solarized theme
Plugin 'altercation/vim-colors-solarized'

" Syntastic
Plugin 'scrooloose/syntastic'

" Git
Plugin 'tpope/vim-fugitive'

" Easy Commenting
Plugin 'tpope/vim-commentary'

" Surround - Easy changing of quotes and stuff
Plugin 'tpope/vim-surround'

" Ctrlp full path fuzzy file finder
Plugin 'kien/ctrlp.vim'

" Ack from vim
Plugin 'mileszs/ack.vim'

" Improved vim status bar
Plugin 'bling/vim-airline'

" Indent guides
Plugin 'Yggdroot/indentLine'

" Language specific syntax highlighting
Plugin 'derekwyatt/vim-scala'
Plugin 'kchmck/vim-coffee-script'
Plugin 'rust-lang/rust.vim'

if !has("win32") || !has("win16")
  "Code Completion
  Plugin 'Valloric/YouCompleteMe'


  " Tree explorer
  "Instead of forcing vim to start Nerdtree just do it manually
  " autocmd vimenter * NERDTree  " make NERDTree come up automatically
  " on vim start

  Plugin 'scrooloose/nerdtree'


  " Make Vim play nice with tmux
  " Use <c-h> <c-j> <c-k> <c-l>
  " to move between window panes in tmux or vim
  Plugin 'christoomey/vim-tmux-navigator'
endif

" Markdown
Plugin 'godlygeek/tabular'
Plugin 'plasticboy/vim-markdown'

" Jade - Express templating
Plugin 'digitaltoad/vim-jade'

" Stylus highlighting
Plugin 'wavded/vim-stylus'

" Haskell
Plugin 'raichoo/haskell-vim'

" end plugin list
call vundle#end()
filetype plugin indent on


" Solarized Dark
syntax enable
set background=dark
colorscheme solarized
" let g:solarized_termcolors=256 " Better terminal colors

" Toggle solarized scheme
" call togglebg#map("<F5>")


" Standard variables
set expandtab                  " tabs to spaces
set tabstop=2                  " spaces entered when tab key is pressed
set shiftwidth=2               " spaces entered for indentation
set number                     " Line numbering
set backspace=indent,eol,start " Make backspacing work right
set clipboard=unnamedplus      " Share system clipboard
set eol                        " End of line at bottom of file
set shiftround
set hlsearch                   " Highlight matches in search
set incsearch                  " Search as characters are entered
set list
set list listchars=tab:»·,trail:·

" custom functons
function! NumberToggle()
  if(&relativenumber == 1)
    set norelativenumber
    set number
  else
    set relativenumber
  endif
endfunc

" Autocmds

" Stripping trailing whitespace on save
autocmd BufWritePre * :%s/\s\+$//e

" Fix rust
autocmd FileType rust setlocal shiftwidth=2 tabstop=2
autocmd BufRead,BufNewFile *.rs set filetype=rust

" Disable the rust style guide recommended 4 space indentation
let g:rust_recommended_style=0

" Hotkeys
" Note noremap is a normal mode non-recursive mapping
" nnoremap and nmap make the bind only work in normal mode

let mapleader=" "
map <silent> <Leader>t :NERDTreeToggle<CR>
nnoremap <silent> <Leader>r :call NumberToggle()<CR>

" This one maps F5 to delete all trailing whitespace
nnoremap <silent> <F5> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR>

" Pressing enter in command mode clears the current search highlighting until
" the next search.
nnoremap <silent> <CR> :noh<CR><CR>

" ctrlp hotkeys
let g:ctrlp_map='<c-p>'
let g:ctrlp_cmd='CtrlP'

" ctrlp configuration
set wildignore+=*/tmp/*,*.so,*.swp,*.zip      " MacOSX/Linux
set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe   " Windows

let g:ctrlp_working_path_mode='ra'

" Highlight any line with ErrorMsg that goes over 120 characters
if exists('+colorcolumn')
  set colorcolumn=120
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

" Indent lines customizations

" Color customizations
" let g:indentLine_color_term=###

" Line indent guides are defaulted to off
let g:indentLine_enabled=0

" Leader + i will toggle line indent guides
map <silent> <Leader>i :IndentLinesToggle<CR>