" Compatibility
set nocompatible
" Plugins
silent! call pathogen#infect()
silent! call pathogen#helptags()
" Filetypes
if has('autocmd')
filetype indent plugin on
" Shortcuts
nnoremap _ap :setlocal filetype=apache<CR>
nnoremap _bi :setlocal filetype=bindzone<CR>
nnoremap _cs :setlocal filetype=css<CR>
nnoremap _ht :setlocal filetype=html<CR>
nnoremap _js :setlocal filetype=javascript<CR>
nnoremap _md :setlocal filetype=markdown<CR>
nnoremap _pl :setlocal filetype=perl<CR>
nnoremap _ph :setlocal filetype=php<CR>
nnoremap _py :setlocal filetype=python<CR>
nnoremap _rb :setlocal filetype=ruby<CR>
nnoremap _sh :setlocal filetype=sh<CR>
nnoremap _vi :setlocal filetype=vim<CR>
nnoremap _xm :setlocal filetype=xml<CR>
endif
" Backups
if !strlen($SUDO_USER) && has('unix')
set backup
set backupext=.bak
set backupdir^=~/.vim/backup//
if !isdirectory($HOME . '/.vim/backup') && exists('*mkdir')
call mkdir($HOME . '/.vim/backup', 'p', 0700)
endif
else
set nobackup
set nowritebackup
endif
" Colors
if has('syntax')
syntax enable
set background=dark
silent! colorscheme sahara
if has('folding')
let &fillchars = 'diff: ,fold: ,vert: '
endif
if exists('&synmaxcol')
set synmaxcol=300
endif
endif
" Commands
if has('cmdline_info')
set ruler
set showcmd
set showmode
endif
cnoremap <C-A> <Home>
cnoremap <C-E> <End>
" Completion
set complete-=i
inoremap <C-F> <C-X><C-F>
inoremap <C-]> <C-X><C-]>
" Digraphs
if has('digraphs')
digraph ./ 8230
endif
" Encoding
set fileformats=unix,dos,mac
if has('multi_byte')
set encoding=utf-8
endif
" Formatting
set autoindent
set expandtab
set smarttab
set nojoinspaces
set shiftround
set shiftwidth=4
set softtabstop=4
set tabstop=4
nnoremap J mzJ`z
" History
set history=1000
" List
set nolist
nnoremap <leader>l :setlocal list!<CR>
" Matching
silent! runtime macros/matchit.vim
" Messages
set shortmess+=I
" Miscellaneous
set backspace=indent,eol,start
set modelines=0
set nrformats-=octal
set report=0
set shellslash
" Netrw
if has('eval')
let g:netrw_silent = 1
let g:netrw_liststyle = 3
let g:netrw_list_hide = '^\.,\~$,^tags$'
endif
" Numbers
set nonumber
nnoremap <leader>n :setlocal number!<CR>
" Paste
set nopaste
set pastetoggle=<F10>
" Reading
set autoread
" Scrolling
set scrolloff=0
set sidescrolloff=16
" Search
if has('extra_search')
set hlsearch
set incsearch
nnoremap <leader>h :set hlsearch!<CR>
nnoremap <leader>i :set incsearch!<CR>
nnoremap <C-l> :nohlsearch<CR><C-l>
if has('autocmd')
augroup vimrc
autocmd!
silent! autocmd InsertEnter * set nohlsearch
silent! autocmd InsertLeave * set hlsearch
augroup END
endif
endif
" Spelling
if has('spell')
set spelllang=en_nz
nnoremap <leader>s :setlocal spell!<CR>
endif
" Swaps
if !strlen($SUDO_USER) && has('unix')
set swapfile
set directory^=~/.vim/swap//
if !isdirectory($HOME . '/.vim/swap') && exists('*mkdir')
call mkdir($HOME . '/.vim/swap', 'p', 0700)
endif
else
set noswapfile
endif
" Terminal
set noesckeys
set lazyredraw
set ttyfast
set visualbell t_vb=
" Timeout
set ttimeout
set ttimeoutlen=50
" Typos
if has('user_commands')
command! -bang -complete=file -nargs=? E e<bang> <args>
command! -bang -complete=file -nargs=? W w<bang> <args>
command! -bang -complete=file -nargs=? WQ wq<bang> <args>
command! -bang -complete=file -nargs=? Wq wq<bang> <args>
command! -bang Q q<bang>
command! -bang Qa qa<bang>
command! -bang QA qa<bang>
command! -bang Wa wa<bang>
command! -bang WA wa<bang>
endif
" Undo
set undolevels=1000
if !strlen($SUDO_USER) && has('unix') && has('persistent_undo')
set undofile
set undodir^=~/.vim/undo//
if !isdirectory($HOME . '/.vim/undo') && exists('*mkdir')
call mkdir($HOME . '/.vim/undo', 'p', 0700)
endif
endif
" Unmaps
noremap <F1> <nop>
nnoremap K <nop>
nnoremap Q <nop>
" Visual
if has('virtualedit')
set virtualedit+=block
endif
" Wildmenu
if has('wildmenu')
set wildmenu
set wildmode=longest:list
if has('wildignore')
set wildignore+=*.a,*.o
set wildignore+=*.bmp,*.gif,*.ico,*.jpg,*.png
set wildignore+=.DS_Store,.git,.hg,.svn
set wildignore+=*~,*.swp,*.tmp
endif
if exists('&wildignorecase')
set wildignorecase
endif
endif
" Windows
if has('windows')
set laststatus=1
set splitbelow
if has('vertsplit')
set splitright
endif
if exists('&showtabline')
set showtabline=1
endif
endif
" Wrapping
set display=lastline
set nowrap
nnoremap j gj
nnoremap k gk
nnoremap <leader>w :set wrap!<CR>
if has('linebreak')
set linebreak
set showbreak=...
endif
" Writing
nnoremap ZW :w!<CR>
nnoremap ZA :wa!<CR>
" Yanking
nnoremap Y y$
" Local
if filereadable(glob('~/.vimrc.local'))
source ~/.vimrc.local
endif