" VIM Configuration - Geoffrey FROGEYE
"

set nocompatible
filetype off

""" PLUGINS MANAGEMENT  """

" NOTE 18-06-24 Got rid of Vundle in favor of vim-plug (why: more recent, supports
" Neovim, simpler). Commented out plugins that seemed useless, feel free to
" uncomment them again if you need to

" Auto-install vim-plug
if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" Plugin definition
call plug#begin()

" Plug 'L9'
" Plug 'rstacruz/sparkup', {'rtp': 'vim/'}
Plug 'tomasr/molokai'
Plug 'tpope/vim-surround'
" Plug 'tpope/vim-fugitive'
" Plug 'tpope/vim-repeat'
Plug 'tpope/tpope-vim-abolish'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'airblade/vim-gitgutter'
Plug 'mbbill/undotree'
Plug 'xolox/vim-misc' " Required for 'xolox/vim-easytags'
Plug 'xolox/vim-easytags'
Plug 'majutsushi/tagbar'
Plug 'wellle/targets.vim'
Plug 'Chiel92/vim-autoformat'
Plug 'tomtom/tcomment_vim'
" Plug 'Shougo/denite.nvim'
" Plug 'tomlion/vim-solidity'
" Plug 'godlygeek/tabular'
" Plug 'jrozner/vim-antlr'
Plug 'maralla/completor.vim'
Plug 'python-mode/python-mode', { 'branch': 'develop' }
Plug 'junegunn/fzf', {'do': './install --bin'}
Plug 'junegunn/fzf.vim'
Plug 'ervandew/supertab'
Plug 'dpelle/vim-LanguageTool'

call plug#end()

""" UNDOTREE """

nmap <F7> :UndotreeToggle<CR>

""" TAGBAR """

nmap <F8> :TagbarToggle<CR>

""" VIM-AIRLINE """

set noshowmode
set laststatus=2
let g:airline_powerline_fonts = 1
" let g:airline#extensions#syntastic#enabled = 1
let g:airline#extensions#tabline#enabled = 1

let g:airline_section_a = airline#section#create(['mode'])
let g:airline_section_b = airline#section#create(['branch', 'hunks'])
let g:airline_section_z = airline#section#create(['%B', '@', '%l', ':', '%c'])
let g:airline_theme = 'wombat'

""" AUTOFORMAT """
nmap <F3> :Autoformat<CR>

""" PYMODE """

let g:pymode_lint_ignore = ["W0401"]
let g:pymode_lint_cwindow = 0

" TODO Even with magic pymod_motion complains about the option `magic&` being not set :/
let g:pymode_motion = 0
set magic

""" FZF """

let g:fzf_layout = { 'down': '~100%' }
let g:fzf_colors =
\ { 'fg':      ['fg', 'Normal'],
  \ 'bg':      ['bg', 'Normal'],
  \ 'hl':      ['fg', 'Comment'],
  \ 'fg+':     ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
  \ 'bg+':     ['bg', 'CursorLine', 'CursorColumn'],
  \ 'hl+':     ['fg', 'Statement'],
  \ 'info':    ['fg', 'PreProc'],
  \ 'border':  ['fg', 'Ignore'],
  \ 'prompt':  ['fg', 'Conditional'],
  \ 'pointer': ['fg', 'Exception'],
  \ 'marker':  ['fg', 'Keyword'],
  \ 'spinner': ['fg', 'Label'],
  \ 'header':  ['fg', 'Comment'] }

nmap gF :Files<CR>
nmap gf :GFiles<CR>
nmap gb :Buffers<CR>
nmap gL :Lines<CR>
nmap gl :BLines<CR>
nmap gT :Tags<CR>
nmap gt :BTags<CR>
nmap gm :Marks<CR>
nmap gw :Windows<CR>
nmap gh :History<CR>
nmap gH :History:<CR>
nmap gS :History/<CR>
nmap gs :Snippets<CR>

" TODO `gd` → go to tag matching selected word, or show a list with that
" of tags pre-filtered with that word

""" SUPERTAB """

let g:SuperTabDefaultCompletionType = "<c-n>" " Go down when completing
let g:SuperTabContextDefaultCompletionType = "<c-n>"

""" LanguageTool """

let g:languagetool_jar = "/usr/share/java/languagetool/languagetool-commandline.jar"


""" VIM SETTINGS """

set encoding=utf-8
set title

set number
set ruler
set wrap

set scrolloff=5

set ignorecase
set smartcase

set incsearch

set hlsearch

set tabstop=4
set shiftwidth=4
set expandtab

set visualbell
set noerrorbells

set backspace=indent,eol,start

set hidden
set updatetime=250

set cursorcolumn

set splitbelow

syntax enable

set background=dark
colorscheme molokai
let g:molokai_original = 1

" From http://stackoverflow.com/a/5004785/2766106
set list
set listchars=tab:╾╌,trail:·,extends:↦,precedes:↤,nbsp:_
set showbreak=↪

filetype on
filetype plugin on
filetype indent on

set wildmode=longest,list
set showcmd

" Put plugins and dictionaries in this dir (also on Windows)
let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir

" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
    let myUndoDir = expand(vimDir . '/undodir')
    " Create dirs
    call system('mkdir ' . vimDir)
    call system('mkdir ' . myUndoDir)
    let &undodir = myUndoDir
    set undofile
endif

" Allow saving of files as sudo when I forgot to start vim using sudo.
" From https://stackoverflow.com/a/7078429
cmap w!! w !sudo tee > /dev/null %

imap jk <Esc>
vmap <Enter> <Esc>

nmap <Enter> o<Esc>
nmap <C-H> :bp<CR>
nmap <C-L> :bn<CR>
nmap <C-K> kkkkkkkkkkkkkkkkkkkkk
nmap <C-J> jjjjjjjjjjjjjjjjjjjjj