" 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>
" Markdown
augroup markdown
autocmd!
autocmd Filetype markdown setlocal formatoptions+=t
autocmd Filetype markdown setlocal textwidth=79
if exists("&colorcolumn")
autocmd Filetype markdown setlocal colorcolumn=+1
endif
augroup END
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")
set fillchars=diff:\ ,fold:\ ,vert:\
endif
if exists("&synmaxcol")
set synmaxcol=3000
endif
endif
" Commands
if has("cmdline_info")
set ruler
set showcmd
set showmode
endif
cnoremap <C-A> <Home>
cnoremap <C-E> <End>
" Completion
inoremap <C-F> <C-X><C-F>
inoremap <C-]> <C-X><C-]>
" Encoding
set fileformats=unix,dos,mac
if has("multi_byte")
set encoding=utf-8
endif
" Formatting
set expandtab
set formatoptions=croqn1
silent! set formatoptions+=j
set smarttab
set nojoinspaces
set shiftround
set shiftwidth=4
set softtabstop=4
set tabstop=4
nnoremap J mzJ`z
if has("eval")
function! ToggleFormatFlag(flag)
let l:operation = (&formatoptions =~ a:flag) ? '-=' : '+='
silent! exec 'setlocal formatoptions' l:operation . a:flag
setlocal formatoptions?
endfunction
nnoremap <silent> <leader>a :<C-U>call ToggleFormatFlag('a')<CR>
nnoremap <silent> <leader>c :<C-U>call ToggleFormatFlag('c')<CR>
nnoremap <silent> <leader>t :<C-U>call ToggleFormatFlag('t')<CR>
endif
" History
set history=1000
" List
set nolist
nnoremap <leader>l :setlocal list!<CR>
" Matching
silent! runtime macros/matchit.vim
" Netrw
if has("eval")
let g:netrw_silent = 1
let g:netrw_liststyle = 3
endif
" Messages
set shortmess+=I
" Miscellaneous
set backspace=indent,eol,start
set modelines=0
set report=0
set shellslash
" Numbers
set nonumber
nnoremap <leader>n :setlocal number!<CR>
" Objects
onoremap ir i[
onoremap ar a[
vnoremap ir i[
vnoremap ar a[
" 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=
" 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 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