" 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
" For accessibility tabs instead of spaces (uncomment for spaces instead of
" tabs)
"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

" I think leaving line endings to git may be more safe
" 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

" Keep text under 78 chars. Common Braille displays have 80, one reserved for
" line continuation, one for diffing?
" https://github.com/prettier/prettier/issues/7475#issuecomment-1484238440
set textwidth=78
" Marginal/line just before that. Set separately so it gets affected by
" editorconfig and modelines?
set colorcolumn=-1