" Use pathogen to manage our runtime files
autocmd!
call pathogen#infect('bundles/{}')

filetype plugin indent on
syntax on

" Basic vim setup
set tabstop=4
set shiftwidth=4
set expandtab
set smarttab
set autoindent
set smartindent
set backspace=indent,eol,start
set nowrap
set wrapscan
set incsearch " incremental search (search as you type)
set number " line numbering
set ruler " setup and show ruler
set textwidth=78
set colorcolumn=80
set formatoptions=qrn1
set cursorline " highlight cursorline
set showmode " show mode in status bar
set showcmd
set showmatch
set cmdheight=2
set ignorecase smartcase
set showtabline=2
set numberwidth=5
set winwidth=79
set switchbuf=useopen

" Show . char for trailing whitespace
" set list
" set listchars=trail:.

" set color scheme
set t_Co=256
"colorscheme wombat256mod
set background=dark
let g:solarized_termcolors=256
colorscheme solarized

" set yanks to go to the clipboard
if $TMUX == ''
  set clipboard+=unnamed
endif

" remap the leader to something more friendly
let mapleader = ","

" time to wait after ESC or leader immediate mode command
set timeout timeoutlen=1000 ttimeoutlen=150

" reload and edit vimrc
nnoremap <leader>sv :source $MYVIMRC<CR>
nnoremap <leader>ev :vsplit $MYVIMRC<CR>

" edit bundle config
nnoremap <leader>eb :vsplit $HOME/.vim/update_bundles<CR>

" save buffer as root
nnoremap <leader>sr :w !sudo tee % > /dev/null<CR>

" setup easy current buffer path expansion -- stolen from practical vim
cnoremap <expr> %% getcmdtype() == ':' ? expand('%:h') . '/' : '%%'

" enable syntax autocompletion
set omnifunc=syntaxcomplete#Complete
set completeopt=menu,preview

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CUSTOM AUTOCMDS
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
augroup vimrcEx
  " Clear all autocmds in the group
  autocmd!
  autocmd FileType text setlocal textwidth=78

  " Jump to last cursor position unless it's invalid or in an event handler
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

  " make twig files use jinja syntax rules
  autocmd BufRead,BufNewFile *.twig set filetype=htmljinja

  " for autoindent with two spaces, always expand tabs
  autocmd FileType ruby,haml,sh,zsh,bash,eruby,yaml,html,nasm,javascript,sass,cucumber set ai sw=2 sts=2 et
  autocmd FileType python set sw=4 sts=4 et
  autocmd Filetype make setlocal noexpandtab

  autocmd BufRead,BufNewFile *.sass set filetype=sass
  autocmd BufRead,BufNewFile *.s set filetype=nasm
  autocmd BufRead,BufNewFile *.asm set filetype=nasm

  autocmd BufRead *.mkd  set ai formatoptions=tcroqn2 comments=n:&gt;
  autocmd BufRead *.markdown  set ai formatoptions=tcroqn2 comments=n:&gt;

  " Leave the return key alone when in command line windows, since it's used
  " to run commands there.
  autocmd! CmdwinEnter * :unmap <CR>
  autocmd! CmdwinLeave * :call MapCR()
  
  " for PHP
  autocmd FileType php set omnifunc=phpcomplete#CompletePHP
  let php_sql_query=1                                                                                        
  let php_htmlInStrings=1

  " for Ruby
  autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
  autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1
  autocmd FileType ruby,eruby let g:rubycomplete_rails = 1
  autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1

  " format and indent xml using xmllint
  autocmd FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
augroup END

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" MULTIPURPOSE TAB KEY
" Indent if we're at the beginning of a line. Else, do completion.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! InsertTabWrapper()
    let col = col('.') - 1
    if !col || getline('.')[col - 1] !~ '\k'
        return "\<tab>"
    else
        return "\<c-p>"
    endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<CR>
inoremap <s-tab> <c-n>

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" RENAME CURRENT FILE
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! RenameFile()
    let old_name = expand('%')
    let new_name = input('New file name: ', expand('%'), 'file')
    if new_name != '' && new_name != old_name
        exec ':saveas ' . new_name
        exec ':silent !rm ' . old_name
        redraw!
    endif
endfunction
map <leader>n :call RenameFile()<CR>

" Insert/delete line numbers
nnoremap <leader>ln :% s/^/\=line('.'). '. ' /<CR>
nnoremap <leader>dln :% s/^[0-9]*. //<CR>

" Line numbering toggle
map <leader>gn :set invnu<CR>

" Nerd tree setup
nmap <silent> <c-n> :NERDTreeToggle<CR>

" Set up nice buffer switching
set hidden " maybe I want to switch buffers without saving
nnoremap <leader><leader> <c-^>

" Setup wildmenu
set wildchar=<Tab> wildmenu wildmode=full
set wildcharm=<C-Z>
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*cache*

" Use ctrl-motion to switch between windows
nnoremap <silent> <C-h> <C-w>h
nnoremap <silent> <C-j> <C-w>j
nnoremap <silent> <C-k> <C-w>k
nnoremap <silent> <C-l> <C-w>l

" Open up a new vertically split window
nnoremap <silent> <leader>nv :botright vnew<CR>

" CTags setup
nnoremap <silent> <F8> :TlistToggle<CR>
set tags=tags;$HOME " this will look in the current directory for 'tags', and work up until $HOME
let Tlist_php_settings = 'php;c:class;f:function;d:constant'
let Tlist_File_Fold_Auto_Close = 1
let Tlist_WinWidth = 40
let Tlist_Close_on_Select = 1
let Tlist_Exit_OnlyWindow = 1

" setup python path
if executable('/usr/local/bin/python3')
  let g:python3_host_prog='/usr/local/bin/python3'
endif

" setup ruby path
if executable('/usr/local/opt/ruby/bin/ruby')
  let g:ruby_host_prog='/usr/local/opt/ruby/bin/ruby'
endif

" Use fuzzyfinder
if executable('/usr/local/bin/fzf')
  set rtp+=/usr/local/opt/fzf
endif

" Air Powerline setup
set laststatus=2
let g:airline_powerline_fonts = 1
let g:airline_theme = 'solarized'
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#fnamemod = ':t'

" gui options
:set guioptions-=m  "remove menu bar
:set guioptions-=T  "remove toolbar
:set guioptions-=r  "remove right-hand scroll bar
:set guifont=MesloLGS\ Nerd\ Font\ Mono:h16

" sql pretty
vnoremap <Leader>rp :s/\<update\>\\|\<select\>\\|\<from\>\\|\<where>\\|\<left join\>\\|\<inner join\>\\|\<group by\>\\|\<order by\>/\r\U&/ge<cr><esc>


silent! py3 pass