"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  configuration vim + IDE                                                 |
"   |  pcht 2016-2024                                                          |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)

" utf8
set encoding=utf-8

filetype off                  " required

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                                  |
"   |                Vundle                                                            |
"   |                                                                                  |
"   |https://github.com/VundleVim/Vundle.vim                                           |
"   |install with :                                                                    |
"   |    git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim|
"   |                                                                                  |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
"
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" git
Plugin 'tpope/vim-fugitive'
" commentary
Plugin 'tpope/vim-commentary'
xmap \\  <Plug>Commentary
nmap \\  <Plug>Commentary
nmap \\\ <Plug>CommentaryLine
nmap \\u <Plug>CommentaryUndo
" Plugin 'Syntastic'
" set statusline+=%#warningmsg#
" set statusline+=%{SyntasticStatuslineFlag()}
" set statusline+=%*

" let g:syntastic_always_populate_loc_list = 1
" let g:syntastic_auto_loc_list = 1
" let g:syntastic_check_on_open = 1
" let g:syntastic_check_on_wq = 0
" let g:syntastic_auto_jump = 2


" Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-repeat'

" unicode characters
" :h unicode-plugin
" map:
" 	c-x c-z: complete unicode char
" 	c-x c-g: complete unicode digraph
Plugin 'chrisbra/unicode.vim'


"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  LSP vim client                                                          |
"   |  ALE (Asynchronous Lint Engine)                                          |
"   |  https://github.com/dense-analysis/ale                                   |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
" Plugin 'dense-analysis/ale'

" let g:ale_linters = {
" \	'sh': ['shellcheck'],
" \	'py': ['flake8'],
" \}

" " flake8 ignore
" let g:ale_python_flake8_options = '--ignore=E501'

" let g:ale_fixers = {
" \   '*': ['remove_trailing_lines', 'trim_whitespace'],
" \}

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  LSP vim client                                                          |
"   |  YouCompleteMe                                                           |
"   |  https://valloric.github.io/YouCompleteMe/                               |
"   |                                                                          |
"   | Install:                                                                 |
"   | https://github.com/ycm-core/YouCompleteMe?tab=readme-ov-file#linux-64-bit|
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
Plugin 'Valloric/YouCompleteMe'

let g:ycm_language_server = []

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  Language Server Protocol LSP                                            |
"   |  https://langserver.org/                                                 |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)

" Archlinux
" https://github.com/hashicorp/terraform-ls

 "             _\|/_
 "             (o o)
 "   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "   |                                                                          |
 "   |  bash-language-server                                                    |
 "   |  https://github.com/bash-lsp/bash-language-server                        |
 "   |                                                                          |
 "   |  install:                                                                |
 "   |         npm i -g bash-language-server                                    |
 "   |  test:                                                                   |
 "   |         bash-language-server --help                                      |
 "   |                                                                          |
 "   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "            (_) (_)
let g:ycm_language_server +=
\ [
\   {
\       'name': 'bash',
\       'cmdline': [ 'bash-language-server', 'start' ],
\       'filetypes': [ 'sh' ],
\   }
\ ]

 "             _\|/_
 "             (o o)
 "   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "   |                                                                          |
 "   |  dockerfile-language-server                                              |
 "   |  https://github.com/rcjsuen/dockerfile-language-server                   |
 "   |                                                                          |
 "   |  install:                                                                |
 "   |         npm install -g dockerfile-language-server-nodejs                 |
 "   |  test:                                                                   |
 "   |         ??                                                               |
 "   |                                                                          |
 "   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "            (_) (_)
let g:ycm_language_server += 
\ [ { 'name': 'docker',
\     'filetypes': [ 'dockerfile' ],
\     'cmdline': [ '/home/patrick/.npm-packages/bin/docker-langserver --stdio' ],
\   },
\ ]

" vim-language-server
" https://github.com/iamcco/vim-language-server

" install:
" 	npm install -g vim-language-server
"

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  reStructuredText                                                        |
"   |  https://github.com/swyddfa/esbonio/tree/develop/lib/esbonio             |
"   |                                                                          |
"   |  install:                                                                |
"   |          pipx install esbonio                                            |
"   |          sudo pacman -Ss esbonio                                         |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
let g:ycm_language_server += 
  \ [ { 'name': 'esbonio',
  \     'filetypes': [ 'rst' ],
  \     'cmdline': [ 'esbonio' ],
  \   },
  \ ]

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  Terraform                                                               |
"   |  https://github.com/hashicorp/terraform-ls                               |
"   |                                                                          |
"   |  install:                                                                |
"   |            https://github.com/hashicorp/terraform-ls                     |
"   |            AUR: https://aur.archlinux.org/terraform-ls.git               |
"   |                                                                          |
"   |  test:                                                                   |
"   |          terraform-ls version                                            |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
let g:ycm_language_server += 
  \ [ { 'name': 'terraform-ls',
  \     'filetypes': [ "ts", "terraform", "terraform-vars" ],
  \     'cmdline': [ 'terraform-ls', 'serve' ],
  \   },
  \ ]




""""""""""""""""""""""""""
" languages autocompletion

" toml
" Plugin 'cespare/vim-toml'

" COC https://github.com/neoclide/coc.nvim
" Use release branch (recommend)
" Plugin 'neoclide/coc.nvim', {'branch': 'release'}
" Or build from source code by using yarn: https://yarnpkg.com
" Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

" tabNine https://www.tabnine.com/
" online deeplearning all language sementic completion system
" Plugin 'zxqfl/tabnine-vim'

" ansible
" Plugin 'pearofducks/ansible-vim'
" enable YAML for hosts.yml
" autocmd BufNewFile,BufRead hosts.y[a]ml setfiletype yaml.ansible

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  language server                                                         |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)



" languages
" Plugin 'octol/vim-cpp-enhanced-highlight'
"
" C++ http://www.vim.org/scripts/script.php?script_id=3302
" install with vim clang_complete.vmb -c 'so %' -c 'q'
"
" GLSL
" Plugin 'tikhomirov/vim-glsl'

" rust
" Plugin 'rust-lang/rust.vim'

" golang
" require Vim 8.0.1453
Plugin 'fatih/vim-go'
au FileType go nmap <leader>m <Plug>(go-test)
au FileType go nmap <leader>a :GoAlternate<cr>
au FileType go nmap gd <Plug>(go-def)
au FileType go set foldmethod=syntax

" :Refactor extract newfunc
" Plugin 'godoctor/godoctor.vim'

" elm ElmCast https://guide.elm-lang.org/
" Plugin 'ElmCast/elm-vim'

" ksp/kos script syntax
" Plugin 'KSP-KOS/EditorTools', {'rtp': 'VIM/vim-kerboscript'}
" kerboscript comment
" or
" Plugin 'Freedzone/kerbovim'
" autocmd FileType kerboscript setlocal commentstring=//\ %s


" terraform 
Plugin 'hashivim/vim-terraform'
let g:terraform_align=1
" let g:terraform_fold_sections=1
let g:terraform_fmt_on_save=1
" let g:terraform_binary_path="/usr/local/Cellar/terraform/0.13.5/bin/terraform"

" screeps.com game
" Plugin 'dbaileychess/vim-screeps'

" python - hand-made
" from https://vim.fandom.com/wiki/Python_-_check_syntax_and_run_script
" autocmd BufRead *.py set makeprg=python\ -c\ \"import\ py_compile,sys;\ sys.stderr=sys.stdout;\ py_compile.compile(r'%')\"



"""""""
" tools
" https://github.com/dhruvasagar/vim-table-mode
" activation: \tm
" add sep   : ||
" add line  : | blabla | blibli |
" realign   : \tr
Plugin 'dhruvasagar/vim-table-mode'
let g:table_mode_corner_corner='+'
let g:table_mode_header_fillchar='='
nmap <leader>tm <esc>:TableModeToggle<cr>
imap <leader>tm <esc>:TableModeToggle<cr>i

" vim-shellcheck
" map:
" 	\m to launch Shellcheck
" 	gb to see SCxxx in browser
Plugin 'itspriddle/vim-shellcheck'
au FileType sh compiler shellcheck
au FileType sh nmap <leader>m :ShellCheck!<cr>
au FileType sh imap <leader>m <esc>:ShellCheck!<cr>i

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  end Vundle                                                              |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)

" syntax
syntax on

" colorscheme default
colorscheme pcht

" print code with :hardcopy using impression.lam.jussieu.fr
" set printdevice=hp5550-509
" set printoptions=left:5pt,right:5pt,top:5pt,bottom:5pt,number:y,duplex:off,wrap:y,paper:A4,portrait:y
" set printheader=%<%F\ -\ page\ %N%=Print\ at\ %{strftime(\'%Y-%m-%d\ %H:%M\')}
" FIXME set printfont=:h18

" modeline : enable « vim:<space> [ vim_set ] + »
set modeline

" set backspace normal
set backspace=2

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  ligne de statut                                                         |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
set statusline=%F%m%r%h%w\ %{fugitive#statusline()}%=[BUF=%n][FORMAT=%{&ff}][TYPE=%Y][ASCII=%03.3b][LINE=%03l][COL=%03v][%p%%]
set laststatus=2

"""""""""""""""""""
" affiche les touches en mode commande
set showcmd

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  numéro de ligne                                                        |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
set number
highlight LineNr ctermbg=black ctermfg=gray

"""""""""""""""""""
" ligne et colonne courante: activation en mode insert et pas en mode normal
" :autocmd InsertEnter,InsertLeave * set cursorline! cursorcolumn!
" highlight CursorLine term=underline cterm=underline
" set cursorcolumn cursorline
" " highlight CursorColumn term=none cterm=none ctermbg=grey ctermfg=black
" highlight CursorColumn term=underline cterm=underline
"""""""""""""""""""
" ligne courante: activation en mode insert et pas en mode normal
:autocmd InsertEnter,InsertLeave * set cursorline! 
set cursorline
highlight CursorLine term=underline cterm=underline

"""""""""""""""""""
" Search/IncSearch
set hlsearch
highlight Search term=reverse,bold cterm=reverse,bold ctermfg=None ctermbg=None
set incsearch
highlight IncSearch term=reverse cterm=reverse ctermfg=None ctermbg=None

" /lemot : insensible a la case
" /LeMot : sensible 
" /\clemot : insensible
" /\CleMot : sensible
set smartcase


 "             _\|/_
 "             (o o)
 "   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "   |                                                                          |
 "   | tab/eof as characters                                                    |
 "   |                                                                          |
 "   | https://vi.stackexchange.com/questions/422/displaying-tabs-as-characters |
 "   | dans vim, utiliser Ctrl-v + u + code utf8                                |
 "   | code : https://codepoints.net/control_pictures                           |
 "   |        tab     : ␉ (U+2409 - SYMBOL FOR HORIZONTAL TABULATION)           |
 "   |                : ˍ (U+02cd - MODIFIER LETTER LOW MACRON)                 |
 "   |                : ․ (U+2024 - ONE DOT LEADER)                             |
 "   |                : • (U+2022 - BULLET)                                     |
 "   |        eol     : ¶ (U+00b6 - PILCROW SIGN)                               |
 "   |        trail   : ␠ (U+2420 - SYMBOL FOR SPACE)                           |
 "   |                : ␣ (U+2423 - OPEN BOX)                                   |
 "   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
 "            (_) (_)
set list
set listchars=tab:␉․,trail:␠,nbsp:⎵,precedes:<,extends:>,eol:¶
" listchars as grey
highlight SpecialKey ctermfg=DarkGrey
highlight NonText ctermfg=DarkGrey
nmap <leader>l <esc>:set invlist<cr>
imap <leader>l <esc>:set invlist<cr>li
" disable by default
set invlist


"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  autoindent                                                              |
"   |                                                                          |
"   |  set autoindent                                                          |
"   |  tabulation                                                              |
"   |  set expandtab                                                           |
"   |  set shiftwidth=4                                                        |
"   |  set softtabstop=4                                                       |
"   |  set tabstop=4                                                           |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)

" replis de code <fold>
" <n>zf pour créer un repli
" za pour ouvrir/fermer un repli déjà crée
" zm pour fermer tous les replis
" zr pour ouvrir tous les replis
 " function! MyFoldFunction ()
 "     let line = getline(v:foldstart)
 "     let sub = substitute(line,'/\*\|\*/\|^\s+','','g')
 "     let lines = v:foldend - v:foldstart + 1
 "     return '[+] ' . v:folddashes.sub . '...' . lines . ' lignes...' . getline(v:foldend)
 " endfunction

set nofoldenable
set foldlevel=3
"" afficher un = sur les replis
" set fillchars=fold:=
" set foldtext=MyFoldFunction()

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  les onglets                                                             |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
" tabe <file> créer un onglet
"function! MoveTab(direction)
"    if (a:direction == 'left')
"        let tabnum = tabpagenr()-2
"        if (tabnum < 0)
"            let tabnum = 0
"        endif
"        execute 'tabm '.tabnum
"    else
"        let tabnum = tabpagenr()
"        execute 'tabm '.tabnum
"    endif
"endfunction
highlight TabLine term=none cterm=none
highlight TabLineSel ctermbg=darkblue
" raccourcis
" gF ouvre un onglet sur le mot sous le cursor
map <C-h> <esc>:tabprevious<cr>
map <C-left> <esc>:tabprevious<cr>
map <C-l> <esc>:tabnext<cr> 
map <C-right> <esc>:tabnext<cr> 


"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  correcteur orthographique                                               |
"   |  utilisation                                                             |
"   |  <]+s>, <[+s>: aller a l'erreur precedente, suivante                     |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)

setlocal spell spelllang=fr,en
" setlocal spell spelllang=en_us,fr
set spell
highlight SpellBad term=underline ctermfg=white ctermbg=red cterm=underline
highlight SpellCap term=italic,underline ctermfg=yellow ctermbg=red  cterm=underline
highlight SpellRare term=bold,italic,underline ctermfg=cyan ctermbg=red cterm=underline
highlight SpellLocal term=underline ctermfg=grey ctermbg=red cterm=underline
highlight SpellErrors term=italic,underline ctermbg=red ctermfg=white


"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  ouverture du fichier à l'ancienne position                              |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
function! s:CursorOldPosition()
    if line("'\"") > 0 && line("'\"") <= line("$")
        exe "normal g`\""
    endif
endfunction
autocmd BufReadPost * silent! call s:CursorOldPosition()

"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  templates                                                               |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
function! LoadTemplate(extension,type)
    if (a:type == 'all')
        silent! execute '0r' . $HOME . '/.vim/__tpl/' . a:extension . '.tpl'
        silent! execute 'source ' .$HOME . '/.vim/__tpl.vim'
    endif
    " abbreviations
    silent! execute 'source ' .$HOME . '/.vim/__tpl/' . a:extension . '.abb'
    " dictionaries
    silent! execute 'source ' .$HOME . '/.vim/__tpl/' . a:extension . '.dict'
    " commandes vim
    silent! execute 'source ' .$HOME . '/.vim/__tpl/' . a:extension . '.vim'
endfunction
autocmd BufNewFile * silent! call LoadTemplate('%:e','all')
autocmd BufRead * silent! call LoadTemplate('%:e','notall')

" " omnifunc
" if has("autocmd") && exists("+omnifunc") 
" autocmd Filetype * 
"     \  if &omnifunc == "" | 
"     \   setlocal omnifunc=syntaxcomplete#Complete | 
"     \  endif 
" endif 

" CISCO ACL
augroup filetype 
        au! BufRead,BufNewFile *.crules     set filetype=ciscoacl 
        au! BufRead,BufNewFile *.acl        set filetype=ciscoacl 
augroup END

" markdown syntax for gitit
augroup filetype 
        au! BufRead,BufNewFile *.page     set filetype=markdown
        au! BufRead,BufNewFile *.md       set filetype=markdown 
augroup END



"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  boxes tool to pretty print code                                         |
"   |  from https://boxes.thomasjensen.com/docs/install.html                   |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
autocmd BufEnter * nmap <leader>bb !!boxes -d shell -s 80<CR>
autocmd BufEnter * vmap <leader>bb !boxes -d shell -s 80<CR>
autocmd BufEnter * nmap <leader>BB !!boxes -d shell -s 80 -r<CR>
autocmd BufEnter * vmap <leader>BB !boxes -d shell -s 80 -r<CR>
autocmd BufEnter *.go,*.java nmap <leader>bb !!boxes -d cpp -s 80<CR>
autocmd BufEnter *.go,*.java vmap <leader>bb !boxes -d cpp -s 80<CR>
autocmd BufEnter *.go,*.java nmap <leader>BB !!boxes -d cpp -s 80 -r<CR>
autocmd BufEnter *.go,*.java vmap <leader>BB !boxes -d cpp -s 80 -r<CR>
autocmd BufEnter .vimrc* nmap <leader>bb !!boxes -d vim -s 80<CR>
autocmd BufEnter .vimrc* vmap <leader>bb !boxes -d vim -s 80<CR>
autocmd BufEnter .vimrc* nmap <leader>BB !!boxes -dvim -s 80 -r<CR>
autocmd BufEnter .vimrc* vmap <leader>BB !boxes -d vim -s 80 -r<CR>

" Search down into subfolders
" Provides tab-completion for all file-related tasks
" use :find + <tab>
set path+=**
" Display all matching files when we tab complete
set wildmenu

" formatoptions
set formatoptions=tcpr

" tab and spaces
" see http://vimcasts.org/episodes/tabs-and-spaces/
" set ts=4 sts=4 sw=4 noet
set tabstop=4 
set softtabstop=4
set shiftwidth=4
set noexpandtab

" keep center
set scrolloff=999
"             _\|/_
"             (o o)
"   <~~~~~~oOO-{_}-OOo~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"   |                                                                          |
"   |  keymaps                                                                 |
"   |                                                                          |
"   <~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
"            (_) (_)
" no arrows keys no more
nmap <left> <nop>
nmap <right> <nop>
nmap <up> <nop>
nmap <down> <nop>

" Esc remap
imap jj <esc>
imap kk <esc>

" moves
" nmap K <C-u>
" nmap J <C-d>

" search next/previous with center view
" no need with scrolloff=99
" nmap n nzz
" nmap N Nzz

" always open file even new one
nmap gf :e <cfile><cr>

" increase / decrease
:nnoremap <A-a> <C-a>
:nnoremap <A-x> <C-x>
" speed up
" edit .vimrc
nmap <leader>v :vs ~/.vimrc<cr>
imap <leader>v <esc>:vs ~/.vimrc<cr>i
nmap <leader>V :source ~/.vimrc<cr>
" see file
imap <leader>s <esc>:!see %<cr>i
nmap <leader>s :!see %<cr>
" html + php
" nmap <leader>h :set ft=html<cr>
" imap <leader>h <esc>:set ft=html<cr>i
" nmap <leader>p :set ft=php<cr>
" imap <leader>p <esc>:set ft=php<cr>i
" make
nmap <leader>m :w<cr>:!clear<cr>:make<cr>
imap <leader>m <esc>:w<cr>:!clear<cr>:make<cr>
nmap <leader>t :w<cr>:!clear<cr>:make test<cr>
imap <leader>t <esc>:w<cr>:!clear<cr>:make test<cr>
nmap <leader>, :cprevious<cr>
imap <leader>, <esc>:cprevious<cr>i
nmap <leader>. :cnext<cr>
imap <leader>. <esc>:cnext<cr>i
" edit alternative 
nmap <leader>/ :e#<cr>
" auto indent
nmap <leader>i m`gg=G``
" try ; as :
nmap ; :