if &compatible
	set nocompatible
	set modelines=1
endif

call plug#begin('~/.vim/bundle')

Plug 'svermeulen/vim-yoink'
Plug 'will133/vim-dirdiff'
Plug 'jaredgorski/spacecamp'

call plug#end()            " required

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab

set encoding=utf-8
set scrolloff=10
set autoindent
set cino=l1,:0
set showmode
set showcmd
" do not force write on buffer switch
set hidden
" set visualbell
set nowrapscan

set cursorline
set ttyfast
set lazyredraw
set ruler
set backspace=eol,indent,start
" statusline {{{
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
set laststatus=2

set statusline+=\  "comment to remove trailing space
set number
set relativenumber
" Make Vim to handle long lines nicely.
set wrap
set textwidth=79
set formatoptions=cqrnb1j

syntax on

set showmatch
"set matchtime=3
"Control it with %/s///i - ignore and I - sens
set ignorecase
set smartcase
" %s///g not needed
set gdefault
set hlsearch
set incsearch

set shell=/bin/bash
set path+=**
set updatetime=100
set nospell
set spelllang=en
" Dictionary path, from which the words are being looked up.
set dictionary+=/usr/share/dict/words
set clipboard=unnamed

"set exrc

if exists("+undofile")
	if isdirectory($HOME . '/.vim/undo') == 0
		:silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
	endif
	set undodir=~/.vim/undo/
	set undofile
endif

let mapleader = "\\"

"nnoremap j gj
"nnoremap k gk

" Get Rid of stupid Goddamned help keys
inoremap <F1> <ESC>
nnoremap <F1> <ESC>
vnoremap <F1> <ESC>
" jj For Quicker Escaping between normal and editing mode
inoremap jj <ESC>
inoremap jk <ESC>
inoremap :w<CR> <Esc>:w<CR>i

" space one line, home,end globally increase/decrease
nnoremap <Home> zc
nnoremap <End> zo

" Map : to ; also in command mode
"nnoremap ; :

" Reselect visual block after incrementing/decrementing
vnoremap <c-a> <c-a>gv
vnoremap <c-x> <c-x>gv

nnoremap <leader>2 <esc>:set tabstop=2 softtabstop=2 shiftwidth=2<cr>
nnoremap <leader>4 <esc>:set tabstop=4 softtabstop=4 shiftwidth=4<cr>
nnoremap <leader>8 <esc>:set tabstop=8 softtabstop=8 shiftwidth=8<cr>

map <F12> :colorscheme random<CR>

nnoremap S :%s//g<LEFT><LEFT>
xnoremap S :s//g<LEFT><LEFT>
xmap <BS> x

" Make pasting done without any indentation break
set pastetoggle=<F3>

" leader Command to remove white space from a file
""nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>

" This causes issues with FZF
"tnoremap <Esc> <C-W><C-W>

nnoremap <leader><space> :nohlsearch<cr>

" yoink configuration
nmap <leader>yp <plug>(YoinkPostPasteSwapBack)
nmap <leader>yn <plug>(YoinkPostPasteSwapForward)
nmap p <plug>(YoinkPaste_p)
nmap P <plug>(YoinkPaste_P)

" Wildmenu completion {{{
set wildmenu
set wildmode=list:longest
set wildignore+=.hg,.git,.svn " Version Controls"
set wildignore+=*.aux,*.out,*.toc "Latex Indermediate files"
set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg "Binary Imgs"
set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest "Compiled Object files"
set wildignore+=*.spl "Compiled spelling world list"
set wildignore+=*.sw? "Vim swap files"
set wildignore+=*.DS_Store "OSX SHIT"
set wildignore+=*.luac "Lua byte code"
set wildignore+=migrations "Django migrations"
set wildignore+=*.pyc "Python Object codes"
set wildignore+=*.orig "Merge resolution files"
" }}}

match Error /\s\+$\|DU\cPA/

" Removing scrollbars
if !has("gui_running")
	set background=dark
	colorscheme spacecamp
	" To show special characters in Vim
	set listchars=tab:▸\ ,trail:¬
	set list
	hi clear SpellBad
	hi SpellBad cterm=underline
	"hi Normal ctermbg=None
endif

if &term =~ '256color'
	" Disable Background Color Erase (BCE) so that color schemes
	" work properly when Vim is used inside tmux and GNU screen.
	" set t_ut=
endif

if has("autocmd")
	"restore cursor position
	autocmd BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
	autocmd FileType helpfile set nonumber

	autocmd WinLeave * set nocursorline
	autocmd WinEnter * set cursorline

	" Set vim to save the file on focus out
	"au FocusLost * :wa

	" Resize Split When the window is resized
	au VimResized * :wincmd =
endif

set foldenable
set foldlevelstart=999
set foldnestmax=5
set foldtext=FoldFormat()
set fillchars=fold:\  " comment just to remove trailing
set foldmethod=syntax
if has('folding')
	setglobal foldopen+=jump
endif

function! FindAlternate()
	let l:ext = 'h'
	let l:curr_ext = expand('%:e')
	if (l:curr_ext == 'c')
		let l:ext = 'h'
	elseif (l:curr_ext == 'cpp')
		let l:ext = 'h'
	elseif (l:curr_ext == 'h')
		let l:ext = 'c'
	elseif (l:curr_ext == 'hpp')
		let l:ext = 'cpp'
	endif
	let l:file = expand('%:t:r') . '.' . l:ext
	:exec 'find ' . l:file
endfunction

nnoremap <F6> :call FindAlternate()<CR>

setglobal complete-=i
setglobal virtualedit=block
setglobal shiftround

set shortmess+=c
set signcolumn=yes
set cmdheight=2

function! s:check_back_space() abort
	let col = col('.') - 1
	return !col || getline('.')[col - 1]  =~# '\s'
endfunction

"hi None ctermbg=None ctermfg=None

let g:vim_search_pulse_mode = 'pattern'
let g:vim_search_pulse_duration = 400

"Taken from 256_noir readme:
set cursorline
highlight CursorLine cterm=NONE ctermfg=NONE ctermbg=233 guifg=NONE guibg=#121212
autocmd InsertEnter * highlight CursorLine cterm=NONE ctermfg=NONE ctermbg=234 guifg=NONE guibg=#1c1c1c
autocmd InsertLeave * highlight CursorLine cterm=NONE ctermfg=NONE ctermbg=233 guifg=NONE guibg=#121212
