" I probably don't need to have Vi compatibility.
set nocompatible

" Show syntax colours
syntax on

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)

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

set number      " Show line numbers.

set ruler       " Show the line and column number of the cursor position,
                " separated by a comma.

set background=dark

"Use modelines!
set modeline

" These may be difficult with multiple languages especially if Vim already
" knows what to do
"set tabstop=4   "four spaces is likely a tab
"set shiftwidth=4
"set expandtab

set autoindent

" Longer history
set history=1000

" Extended % matching
runtime macros/matchit.vim

" Make tab filler useful.
" INVESTIGATE WHAT THIS ACTUALLY DOES?
set wildmenu
set wildmode=list:longest

" Flash, do not beep!
set visualbell

" gvim has light background
"if has('gui_running')
"    set background=light
"endif

" Show hidden characters via
" https://www.perturb.org/display/679_Make_Vim_show_hidden_characters.html
set invlist

"Prefer to UNIX line endings, but understand DOS too.
set fileformats=unix,dos

"Use UTF-8!
set encoding=utf-8
set fileencoding=utf-8

" Remove BOMs. They broke things yesterday and now they wasted my time
" at school! 
" via https://techwelkin.com/how-to-remove-byte-order-mark-bom-characters
set nobomb

" Apply rules per filetype.vim
set filetype
filetype plugin indent on

" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif

" dos2unix ^M copied from https://stackoverflow.com/a/5361702/1675649
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, the file is not saved."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
au BufReadPost * keepjumps call Dos2unixFunction()

" Highlight all search results
set hlsearch

" Red column on the right as indication on what I wish to consider as the
" maximum length of a line.
set colorcolumn=76