" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
" you can find below.  If you wish to change any of those settings, you should
" do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
" everytime an upgrade of the vim packages is performed.  It is recommended to
" make changes after sourcing debian.vim since it alters the value of the
" 'compatible' option.

" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'.  Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
"set compatible

" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
	set t_Co=256
	syntax on
	" Uncomment the following 'let' lines if using xter16 color scheme
	" Select colormap: 'soft', 'softlight', 'standard', or 'allblue'
	let xterm16_colormap = 'allblue'
	" Select brightness: 'low', 'med', 'high', 'default', or custom levels
	let xterm16_brightness = 'high'
	"Other override options:
	let xterm16fg_Cursor = '555'
	let xterm16bg_Normal = 'none'
	"Set color scheme
	colorscheme xterm16
endif

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
	au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
if has("autocmd")
	filetype plugin indent on
endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
set showcmd             " Show (partial) command in status line.
set showmatch           " Show matching brackets.
set ignorecase          " Do case insensitive matching
set smartcase           " Do smart case matching
"set incsearch          " Incremental search
"set autowrite          " Automatically save before commands like :next and :make
"set hidden             " Hide buffers when they are abandoned
set mouse=a             " Enable mouse usage (all modes)
"set nohlsearch          " Turn off search highlighting
set hlsearch            " Turn on search highlighting
"set expandtab           " Turn tabs to spaces
set shiftwidth=4        " Auto-indent amount when using cindent, <<, >>, etc.
set softtabstop=4       " How many spaces represent a tab
set tabstop=4           " Real tab size
set autoindent    " Indent level of new line set by previous line
"set smartindent   " Attempt to intelligently guess level of indent for new line
set cindent   " Attempt to intelligently guess level of indent for new line
set cinkeys-=0#         " Don't un-indent comments
set indentkeys-=0#      " Don't un-indent comments
set nf=octal,hex,alpha	" additional ctrl-a increments
set spell spelllang=en_us   " Set spell check language
set scrolloff=5         " Add visible lines beyond cursor at top or bottom of window

" Turn off search highlighting with Enter
nnoremap <silent> <CR> :nohlsearch<CR><CR>

" Center page on search
noremap n nzz
noremap N Nzz
noremap * *zz
noremap # #zz
noremap g* g*zz
noremap g# g#zz

" Better scrolling keys
noremap <C-n> <C-e>
noremap <C-p> <C-y>
inoremap <C-n> <C-o><C-e>
inoremap <C-p> <C-o><C-y>

" Allow saving files with sudo after starting vim
cmap w!! w !sudo tee > /dev/null %

autocmd FileType plaintex,tex,latex syntax spell toplevel
autocmd FileType plaintex,tex,latex set tw=80
autocmd FileType pug,jade set tw=80
autocmd FileType text set tw=80 nocindent

set backspace=indent,eol,start
set ruler

au BufNewFile,BufRead *.cu set filetype=c
au BufNewFile,BufRead *.tp set filetype=taskpaper

aug python
	" to override ftype/python.vim
	au FileType python setlocal ts=4 sts=4 sw=4 noexpandtab
aug end

" Source a global configuration file if available
if filereadable("/etc/vim/vimrc.local")
	source /etc/vim/vimrc.local
endif

syntax spell toplevel
let g:tex_flavor = 'latex'

function! BuildYCM(info)
	" info is a dictionary with 3 fields
	" - name:   name of the plugin
	" - status: 'installed', 'updated', or 'unchanged'
	" - force:  set on PlugInstall! or PlugUpdate!
	if a:info.status == 'installed' || a:info.force
		!./install.py --all
	endif
endfunction

let g:YouCompleteMeLazyLoaded = 0
function! LazyLoadingYMC()
	if g:YouCompleteMeLazyLoaded == 0
		let g:YouCompleteMeLazyLoaded = 1
		call plug#load('YouCompleteMe') | call youcompleteme#Enable()
	endif
endfunction
autocmd BufRead * call timer_start(1, {id->execute('call LazyLoadingYMC()')} )
"autocmd BufWinEnter * call timer_start(1, {id->execute('call LazyLoadingYMC()')} )
"autocmd InsertEnter * call LazyLoadingYMC()
"autocmd CursorHold * call LazyLoadingYMC()
"autocmd CursorHoldI * call LazyLoadingYMC()

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

Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM'), 'on': [] }
Plug 'lervag/vimtex'
Plug 'tpope/vim-surround'
Plug 'dense-analysis/ale'

call plug#end()

" press / instead of _
nnoremap <C-_> :NERDTreeToggle<CR>
nnoremap <F2> :ALEToggle<CR>


let g:ycm_autoclose_preview_window_after_insertion = 1
let g:ycm_autoclose_preview_window_after_completion = 1

let g:ale_enabled = 0

" enable vimtex completions for YCM
if !exists('g:ycm_semantic_triggers')
	let g:ycm_semantic_triggers = {}
endif
autocmd VimEnter * let g:ycm_semantic_triggers.tex=g:vimtex#re#youcompleteme