let mapleader = ","
set nocompatible              " be iMproved, required
filetype off                  " required

let vundle_dir="~/.vim/bundle/Vundle.vim"
if filereadable(expand(vundle_dir) . "/README.md")
    " set the runtime path to include Vundle and initialize
    let &rtp .= "," . vundle_dir
    call vundle#begin()

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

    Plugin 'scrooloose/nerdtree'
    Plugin 'c.vim'
    Plugin 'jeetsukumaran/vim-buffergator'
    Plugin 'ericcurtin/CurtineIncSw.vim'
    Plugin 'tpope/vim-fugitive'
    Plugin 'tpope/vim-surround'
    Plugin 'ctrlpvim/ctrlp.vim'
    Plugin 'rhysd/vim-clang-format'
    " Plugin 'shougo/neocomplete'
    Plugin 'godlygeek/tabular'
    Plugin 'airblade/vim-gitgutter'

    call vundle#end()            " required
else
    let vundle_repo="https://github.com/VundleVim/Vundle.vim.git"
    echo "Vundle not installed, type :CloneVundle to clone the vundle repo"
    command CloneVundle execute "!git clone " . vundle_repo . " " . vundle_dir
endif

set updatetime=1000 " Default is 4s, but reduce it to make things more real time, like git gutter
highlight Search ctermbg=5

filetype plugin indent on    " required
syntax on
"
" Set the filetype based on the file's extension, but only if
" 'filetype' has not already been set
au BufRead,BufNewFile *.config setfiletype conf

set tabstop=4 " show existing tab with 4 spaces width
set shiftwidth=4 " when indenting with '>', use 4 spaces width
set expandtab " On pressing tab, insert 4 spaces

set mouse=a
set hlsearch

" Warn for trailing whitespace. Search with wrap (w) do not move cursor (n)
function! WhitespaceWarn()
    echohl WarningMsg
    echo 'Found whitespace.'
    echohl None
    echon ' Type :TrailWhitespace to remove it'
endfunction
function! StripTrailingWhitespace()
    " Save cursor position
    let l:save = winsaveview()
    " Remove trailing whitespace
    %s/\s\+$//e
    " Move cursor to original position
    call winrestview(l:save)
    echo "Stripped trailing whitespace"
endfunction
autocmd BufWritePost * if search('\s\+$', 'wn') | call WhitespaceWarn() | endif
command TrailWhitespace call StripTrailingWhitespace()

" Hybrid line numbers on active buffer
set nu rnu
augroup numbertoggle
  autocmd!
  autocmd BufEnter,FocusGained,InsertLeave * set rnu
  autocmd BufLeave,FocusLost,InsertEnter   * set nornu
augroup END

" Copy to the end of line
noremap Y y$

" define upper case versions of :w and :q
command! -bang -range=% -complete=file -nargs=* W <line1>,<line2>write<bang> <args>
command! -bang Q quit<bang>

" fugitive.vim looks for tags in .git
" set tags +=~/tags " Recursively move upwards in tree, searching in subfolders for tags file

if exists(":NERDTree")
    " Open NERDTree if no file specified
    autocmd StdinReadPre * let s:std_in=1
    autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
endif

" CtrlP
let g:ctrlp_working_path_mode = 'ra'

" Find project root
let git_dir_location=finddir('.git', ';')
let git_root_location=fnamemodify(git_dir_location, ':h')

" Locate cscope file
if has("cscope")
    set csto=0 " Search cscope before ctags
    set cst " <C-]> searches cscope also
    set nocsverb " Not verbose when adding database
    set cspc=3 " Display the last 3 components of file path
    "add any database in current dir
    if filereadable("cscope.out")
        cs add cscope.out
    "else search cscope.out in git folder
    else
       let cscope_file=findfile("cscope.out", git_dir_location)
        if !empty(cscope_file) && filereadable(cscope_file)
            exe "cs add" cscope_file git_root_location
        endif
     endif
endif

command! Csc cscope find c <cword>
" Regen cscope
"   sh ~/bin/gen_cscope.sh . .git/cscope.out
"
" Key binds
"

nmap <F2> :NERDTreeToggle<CR>
nmap <F3> :NERDTreeFind<CR>
map <F5> :call CurtineIncSw()<CR>
nmap <F8> :silent !/home/efjtjkb/bin/comp<enter>
" Remap <F9> (c-vim uses this)
"nmap <F9> :silent !/home/efjtjkb/bin/run<enter>
autocmd VimEnter * noremap <F9> :silent !/home/efjtjkb/bin/run<enter>
nmap <F10> :silent !/home/efjtjkb/bin/run old<enter>

nmap <Leader>cf :cd %:p:h <CR> " Change dir to parent of current file
nmap <Leader>cg :cd $git_root_location <CR> " Change dir to git root
nmap <Leader>vs :sp $MYVIMRC <CR>
nmap <Leader>vv :vsp $MYVIMRC <CR>
nmap <Leader>vt :tabnew $MYVIMRC <CR>
nmap <Leader>vo :e $MYVIMRC <CR>
nmap <Leader>v :e $MYVIMRC <CR>
