" ===== hasufell's vimrc ))))

" no ATTENTION messages when swap file is already found
set shortmess+=A

let g:pymode_python = 'python3'

" plugin stuff
filetype plugin on
filetype indent on

set backspace=indent,eol,start " backspace through everything in insert mode
set cmdheight=1

set wildmenu
" set wildmode=longest,list,full

" plugins
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/home/jule/.cache/dein/repos/github.com/Shougo/dein.vim

let s:toml = '/home/jule/.vim/plugins.toml'
" Required:
if dein#load_state('/home/jule/.cache/dein')
  call dein#begin('/home/jule/.cache/dein', ['/home/jule/.vim/vimrc', '/home/jule/.vim/plugins.toml'])

  call dein#load_toml(s:toml)

  " Let dein manage dein
  " Required:
  call dein#add('/home/jule/.cache/dein/repos/github.com/Shougo/dein.vim')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" ===== further plugin initialization and default config =====
so ~/.vim/plugged/cmdalias.vim/plugin/cmdalias.vim

" lustyexplorer
set hidden


" ==== conque ====
" command aliases
call CmdAlias('t','tabnew')
" call CmdAlias('cmd','ConqueTermSplit')
" call CmdAlias('bash','ConqueTermSplit bash<CR>')
call CmdAlias('openall','tab sball')
call CmdAlias('stripw','call StripTrailingWhitespaces()<CR>')
call CmdAlias('hotkeys', 'tabnew ~/.vim/hotkeys')
call CmdAlias('TC', 'call ToggleComment()<CR>')
call CmdAlias('TF', 'call ToggleFoldText()<CR>')
call CmdAlias('ctags', '!/usr/bin/ctags -R --langmap=c:.c.h --c++-kinds=+p --c-kinds=+p+x --fields=+i+a+S+t+l+m+n --extra=+q .<CR>')
call CmdAlias('Nf', 'Neoformat')
call CmdAlias('NF', 'Neoformat')
call CmdAlias('nf', 'Neoformat')
call CmdAlias('LS', 'LanguageClientStart')



" global settings
if has('gui_running')
	set guioptions -=T

	" disable gvim tab
	set guioptions-=e

	set winaltkeys=no
	set guiheadroom=0
else
	set termguicolors
endif
set foldmethod=syntax   "fold based on indent
set foldnestmax=10      "deepest fold is 10 levels
set nofoldenable        "dont fold by default
set foldlevel=1         "this is just what i useset directory=~/.vimtmp
set mouse=a
set autoread
set number
set encoding=utf8
set guifont=Monospace\ 14
set clipboard=unnamedplus
set textwidth=0
set tabstop=4
set shiftwidth=4
set directory=~/.vimtmp
set modeline
set modelines=1
set autoindent
set laststatus=2

let g:nickID = 'hasufell'

" don't yank to buffer on deletion
" vnoremap d "_d
" nnoremap d "_d
vnoremap x "_x
nnoremap x "_x

" Syntax
syntax on

" pane navigation
" Use ctrl-[hjkl] to select the active split!
let g:C_Ctrl_j = 'off'
let g:BASH_Ctrl_j = 'off'

try
    lang en_US
catch
endtry

" git-gutter workaround
" https://github.com/airblade/vim-gitgutter/issues/696
autocmd ColorScheme * highlight! link SignColumn LineNr

" ==========colors===========
" set t_Co=256
let g:solarized_termcolors=256

if exists('g:GtkGuiLoaded')
	let g:neosolarized_contrast = 'normal'
	let g:neosolarized_visibility = 'normal'
	let g:neosolarized_vertSplitBgTrans = 0
	let g:neosolarized_bold = 1
	let g:neosolarized_underline = 1
	let g:neosolarized_italic = 1
	set background=dark
	colorscheme NeoSolarized
else
	let g:neosolarized_contrast = 'normal'
	let g:neosolarized_visibility = 'normal'
	let g:neosolarized_vertSplitBgTrans = 0
	let g:neosolarized_bold = 1
	let g:neosolarized_underline = 1
	let g:neosolarized_italic = 1
	set background=dark
	colorscheme NeoSolarized
endif

" ===========================


" Disable annoying auto line break
fu! DisableBr()
	set wrap
	set linebreak
	set nolist  " list disables linebreak
	set textwidth=0
	set wrapmargin=0
	set formatoptions-=t
endfu

" Disable line breaks for all file types
au BufNewFile,BufRead *.* call DisableBr()


" ==========copy/paste===========
function! Paste(mode)
	if a:mode == 'v'
		normal gv
		normal "_d
		normal "+gP
		normal l
	elseif a:mode == 'i'
		set virtualedit=all
		normal `^"+gP
		let &virtualedit = ''
	endif
endfunction


" ======select all=======
function! Select()
	set virtualedit=all
	normal `^ggVG
	let &virtualedit = ''
endfunction
" =======================



" ====== traling whitespace =====
fun! ShowTrailingWhitespace(pattern)
	if &ft == 'conque_term'
		call clearmatches()
		return
	endif
	if &ft == 'diff'
		call clearmatches()
		return
	endif
	let str=a:pattern
	if str == '1'
		match ExtraWhitespace /\s\+$/
	elseif str == '2'
		call clearmatches()
"		match ExtraWhitespace /\s\+\%#\@<!$/
	elseif str == '3'
		match ExtraWhitespace /\s\+$/
	endif
endfun


highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * call ShowTrailingWhitespace('1')
autocmd InsertEnter * call ShowTrailingWhitespace('2')
autocmd InsertLeave * call ShowTrailingWhitespace('3')
autocmd BufWinLeave * call clearmatches()


fun! StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun


" ===========================


" comment hiding
func! IsComment( lnum )
	return synIDattr(synID(a:lnum, match(getline(a:lnum),'\S')+1, 1),'name') =~? 'comment'
endfun


"set fdm=expr
set fde=IsComment(v:lnum)?1:IsComment(prevnonblank(v:lnum))?1:IsComment(nextnonblank\(v:lnum))?1:0


" light #073642 dark #002b36 grey #586e75
highlight Folded gui=NONE guifg=#586e75 guibg=#002b36
set foldtext='\ '


let g:folded = 0
function! ToggleComment()
	if (g:folded == 0)
		highlight Comment guifg=#002b36
		let g:folded=1
	else
		highlight Comment guifg=#586e75
		let g:folded=0
	endif
endfunction


let g:myfoldtext = 0
function! ToggleFoldText()
	if (g:myfoldtext == 0)
		set foldtext='--'.v:folddashes.'\ '.getline(v:foldstart).'\ '
		let g:myfoldtext=1
	else
		set foldtext='\ '
		let g:myfoldtext=0
	endif
endfunction


""""""""""""""""""""""""""""""
" vim macro to jump to devhelp topics.
""""""""""""""""""""""""""""""
function! DevHelpCurrentWord()
        let word = expand('<cword>')
        exe '!devhelp -s ' . word . ' &'
endfunction

function! ManCurrentWord()
        let word = expand('<cword>')
        exe '!man 3 ' . word
endfunction

" vim:foldmethod=marker:foldlevel=0