" __     ___             ____        __             _ _
" \ \   / (_)_ __ ___   |  _ \  ___ / _| __ _ _   _| | |_ ___
"  \ \ / /| | '_ ` _ \  | | | |/ _ \ |_ / _` | | | | | __/ __|
"   \ V / | | | | | | | | |_| |  __/  _| (_| | |_| | | |_\__ \
"    \_/  |_|_| |_| |_| |____/ \___|_|  \__,_|\__,_|_|\__|___/
" Default Vim options. Some have been modified.
" These used to be loaded through 'source $VIMRUNTIME/defaults.vim'


" Use Vim settings, rather than Vi settings (much better!).
" This must be first, because it changes other options as a side effect.
" Avoid side effects when it was already reset.
if &compatible
  set nocompatible
endif

" When the +eval feature is missing, the set command above will be skipped.
" Use a trick to reset compatible only when the +eval feature is missing.
silent! while 0
  set nocompatible
silent! endwhile

" Allow backspacing over everything in insert mode.
set backspace=indent,eol,start

set history=200		" keep 200 lines of command line history
set ruler		" show the cursor position all the time
set showcmd		" display incomplete commands
set wildmenu		" display completion matches in a status line

set ttimeout		" time out for key codes
set ttimeoutlen=100	" wait up to 100ms after Esc for special key

" Show @@@ in the last line if it is truncated.
set display=truncate

" Show a few lines of context around the cursor.  Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5

" Do incremental searching when it's possible to timeout.
if has('reltime')
  set incsearch
endif

" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it
" confusing.
set nrformats-=octal

" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries.
if has('win32')
  set guioptions-=t
endif

" Don't use Ex mode, use Q for formatting.
" Revert with ":unmap Q".
map Q gq

" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
" Revert with ":iunmap <C-U>".
inoremap <C-U> <C-G>u<C-U>

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
" Only xterm can grab the mouse events when using the shift key, for other
" terminals use ":", select text and press Esc.
if has('mouse')
  if &term =~ 'xterm'
    set mouse=a
  else
    set mouse=nvi
  endif
endif

" Switch syntax highlighting on when the terminal has colors or when using the
" GUI (which always has colors).
if &t_Co > 2 || has("gui_running")
  " Revert with ":syntax off".
  syntax on

  " I like highlighting strings inside C comments.
  " Revert with ":unlet c_comment_strings".
  let c_comment_strings=1
endif

" Only do this part when Vim was compiled with the +eval feature.
if 1

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  " Revert with ":filetype off".
  filetype plugin indent on

  " Put these in an autocmd group, so that you can revert them with:
  " ":augroup vimStartup | au! | augroup END"
  augroup vimStartup
    au!

    " When editing a file, always jump to the last known cursor position.
    " Don't do it when the position is invalid, when inside an event handler
    " (happens when dropping a file on gvim) and for a commit message (it's
    " likely a different one than last time).
    autocmd BufReadPost *
      \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
      \ |   exe "normal! g`\""
      \ | endif

  augroup END

endif

" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
" Only define it when not defined already.
" Revert with: ":delcommand DiffOrig".
if !exists(":DiffOrig")
  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
		  \ | wincmd p | diffthis
endif

if has('langmap') && exists('+langremap')
  " Prevent that the langmap option applies to characters that result from a
  " mapping.  If set (default), this may break plugins (but it's backward
  " compatible).
  set nolangremap
endif










if has("vms")
  set nobackup		" do not keep a backup file, use versions instead
else
  set backup		" keep a backup file (restore to previous version)
  if has('persistent_undo')
    set undofile	" keep an undo file (undo changes after closing)
  endif
endif

if &t_Co > 2 || has("gui_running")
  " Switch on highlighting the last used search pattern.
  set hlsearch
endif

" Put these in an autocmd group, so that we can delete them easily.
"augroup vimrcEx
 " au!

  " For all text files set 'textwidth' to 78 characters.
"  autocmd FileType text setlocal textwidth=78
"augroup END


"     _       _     _          _   _ _
"    / \   __| | __| | ___  __| | | (_)_ __   ___  ___
"   / _ \ / _` |/ _` |/ _ \/ _` | | | | '_ \ / _ \/ __|
"  / ___ \ (_| | (_| |  __/ (_| | | | | | | |  __/\__ \
" /_/   \_\__,_|\__,_|\___|\__,_| |_|_|_| |_|\___||___/
" All text below is not from the default vimrc.


" Enable syntax highlighting if the terminal supports color
if &t_Co > 1
	syntax enable
	colorscheme atom-dark

	" Clear 'background color erase' value to prevent
	"   terminal background bleed.
	set t_ut=
endif


" Enable line numbers in the left margin
set number
set numberwidth=4

" Enable relative line numbers
"set relativenumber

" Display invisible characters.
"    Show tabs as '<--->', and trailing spaces as '·'
set list
" set listchars=tab:<->,trail:·
set listchars=tab:\|\ \|,trail:·,nbsp:⎵
" Special char list: ␠⎵⏎

" Don't clutter directories with swap files.
" Save them in /tmp instead.
set backupdir=/tmp//,.
set directory=/tmp//,.
set undodir=/tmp//,.


"  _  __            __  __                   _
" | |/ /___ _   _  |  \/  | __ _ _ __  _ __ (_)_ __   __ _ ___
" | ' // _ \ | | | | |\/| |/ _` | '_ \| '_ \| | '_ \ / _` / __|
" | . \  __/ |_| | | |  | | (_| | |_) | |_) | | | | | (_| \__ \
" |_|\_\___|\__, | |_|  |_|\__,_| .__/| .__/|_|_| |_|\__, |___/
"           |___/               |_|   |_|            |___/
" Custom keybinds and commands

" jh to escape in insert mode, 'cuz esc is hard to reach.
inoremap jh <Esc>

" Map F5 to clear all trailing whitespace in normal mode.
"  the _s variable is used to preserve the search pattern register.
nnoremap <silent> <F5> :let _s=@/ <Bar> :%s/\s\+$//e <Bar> :let @/=_s <Bar> :nohl <Bar> :unlet _s <CR>

" Map Ctrl-k to toggle invisibles in normal mode
nnoremap <C-k> :set list! <CR>

" A command that makes figlet titles
command -nargs=1 F :r !figlet <q-args><CR>
command -nargs=1 Ff :r !figlet -f small <q-args><CR>

nnoremap <C-p> :set tabstop=4 shiftwidth=4 noexpandtab<CR>
nnoremap <C-o> :set tabstop=8 shiftwidth=8 noexpandtab<CR>


" Autodetect filetypes and set proper indentation
" Default: 8
:set tabstop=8 shiftwidth=8 noexpandtab
:autocmd Filetype py setlocal tabstop=4 shiftwidth=4 noexpandtab
:autocmd Filetype lua setlocal tabstop=4 shiftwidth=4 noexpandtab


"  ____  _             _
" |  _ \| |_   _  __ _(_)_ __  ___
" | |_) | | | | |/ _` | | '_ \/ __|
" |  __/| | |_| | (_| | | | | \__ \
" |_|   |_|\__,_|\__, |_|_| |_|___/
"                |___/

" The matchit plugin makes the % command work better, but it is not backwards
" compatible.
" The ! means the package won't be loaded right away but when plugins are
" loaded during initialization.
if has('syntax') && has('eval')
  packadd! matchit
endif

nmap <F2>           <Plug>ToggleHexHighlight

"filetype plugin on       " may already be in your .vimrc

let g:pencil#textwidth = 70
augroup pencil
  autocmd!
  autocmd FileType markdown,mkd call pencil#init({'wrap': 'soft'})
  autocmd FileType text         call pencil#init()
  autocmd FileType text         setlocal list
augroup END