vim/.vimrc
" ██
" ░░
" ██ ██ ██ ██████████ ██████ █████
" ░██ ░██░██░░██░░██░░██░░██░░█ ██░░░██
" ░░██ ░██ ░██ ░██ ░██ ░██ ░██ ░ ░██ ░░
" ░░████ ░██ ░██ ░██ ░██ ░██ ░██ ██
" ░░██ ░██ ███ ░██ ░██░███ ░░█████
" ░░ ░░ ░░░ ░░ ░░ ░░░ ░░░░░
"
" ▓▓▓▓▓▓▓▓▓▓
" ░▓ author ▓ xero <x@xero.nu>
" ░▓ code ▓ http://code.xero.nu/dotfiles
" ░▓ mirror ▓ http://git.io/.files
" ░▓▓▓▓▓▓▓▓▓▓
" ░░░░░░░░░░
"
" use vim settings, rather than vi settings
" must be first, because it changes other options as a side effect
set nocompatible
" paste without auto indentation
set paste
" maintain undo history between sessions
set undofile
set undodir=~/.vim/undo
set noswapfile
" lazy file name tab completion
set wildmode=longest,list,full
set wildmenu
set wildignorecase
" case insensitive search
set ignorecase
set smartcase
" the /g flag on :s substitutions by default
set gdefault
" make backspace behave in a sane manner
set backspace=indent,eol,start
" searching
set hlsearch
set incsearch
" use indents of 4 spaces
set shiftwidth=2
" tabs are spaces, not tabs
set expandtab
" an indentation every four columns
set tabstop=2
" let backspace delete indent
set softtabstop=2
" remove trailing whitespaces and ^M chars
autocmd FileType c,cpp,java,php,js,python,twig,xml,yml autocmd BufWritePre <buffer> :call setline(1,map(getline(1,"$"),'substitute(v:val,"\s\+$","","")'))
" let mapleader=","
vnoremap <silent> <leader>y :w !xsel -i -b<CR>
nnoremap <silent> <leader>y V:w !xsel -i -b<CR>
nnoremap <silent> <leader>p :silent :r !xsel -o -b<CR>
" ┏━╸┏━┓┏┳┓┏┳┓┏━┓┏┓╻╺┳┓┏━┓
" ┃ ┃ ┃┃┃┃┃┃┃┣━┫┃┗┫ ┃┃┗━┓
" ┗━╸┗━┛╹ ╹╹ ╹╹ ╹╹ ╹╺┻┛┗━┛
" make ; work like : for commands (lazy shifting)
nnoremap ; :
" json pretty print
command J :%!python -mjson.tool
" remove trailing white space
command Nows :%s/\s\+$//
" remove blank lines
command Nobl :g/^\s*$/d
" toggle spellcheck
command Spell :setlocal spell! spell?
" ╻┏┓╻╺┳╸┏━╸┏━┓┏━╸┏━┓┏━╸┏━╸
" ┃┃┗┫ ┃ ┣╸ ┣┳┛┣╸ ┣━┫┃ ┣╸
" ╹╹ ╹ ╹ ┗━╸╹┗╸╹ ╹ ╹┗━╸┗━╸
" show matching brackets/parenthesis
set showmatch
" disable startup message
set shortmess+=I
" syntax highlighting and colors
syntax on
colorscheme sourcerer
filetype off
" stop unnecessary rendering
set lazyredraw
" show line numbers
set number
" no line wrapping
set nowrap
" no folding
set foldlevel=99
set foldminlines=99
" don't wrap long lines
set nowrap
" highlight column
set cursorcolumn
" ┏━┓╻ ╻ ╻┏━╸╻┏┓╻ ┏━┓╺┳╸╻ ╻┏━╸┏━╸
" ┣━┛┃ ┃ ┃┃╺┓┃┃┗┫ ┗━┓ ┃ ┃ ┃┣╸ ┣╸
" ╹ ┗━╸┗━┛┗━┛╹╹ ╹ ┗━┛ ╹ ┗━┛╹ ╹
" i struggle with the decision to use plugins or a more vanilla vim. but right now i'm feeling sytanx completion, linting, and visual git diffs. don't judge me.
" to install from the shell run:
"& git clone https://github.com/gmarik/Vundle.vim.git ~/dotfiles/vim/.vim/bundle/Vundle.vim && vim +BundleInstall +qall && PYTHON=/usr/bin/python2 ~/dotfiles/vim/.vim/bundle/YouCompleteMe/install.sh --clang-completer
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'Valloric/YouCompleteMe'
Plugin 'scrooloose/syntastic'
Plugin 'airblade/vim-gitgutter'
Plugin 'isa/vim-matchit'
Plugin 'shawncplus/phpcomplete.vim'
Plugin 'mustache/vim-mustache-handlebars'
Plugin 'itchyny/lightline.vim'
Plugin 'tpope/vim-fugitive'
call vundle#end()
filetype plugin indent on
" syntatic http://git.io/syntastic.vim
" linters: (from aur) nodejs-jshint, nodejs-jsonlint, csslint, checkbashisms
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
highlight SyntasticErrorSign ctermfg=red ctermbg=237
highlight SyntasticWarningSign ctermfg=yellow ctermbg=237
highlight SyntasticStyleErrorSign ctermfg=red ctermbg=237
highlight SyntasticStyleWarningSign ctermfg=yellow ctermbg=237
" git-gutter http://git.io/vimgitgutter
let g:gitgutter_realtime = 1
let g:gitgutter_eager = 1
let g:gitgutter_diff_args = '-w'
let g:gitgutter_sign_added = '+'
let g:gitgutter_sign_modified = '~'
let g:gitgutter_sign_removed = '-'
let g:gitgutter_sign_removed_first_line = '^'
let g:gitgutter_sign_modified_removed = ':'
let g:gitgutter_max_signs = 1500
highlight clear SignColumn
highlight GitGutterAdd ctermfg=green ctermbg=237
highlight GitGutterChange ctermfg=yellow ctermbg=237
highlight GitGutterDelete ctermfg=red ctermbg=237
highlight GitGutterChangeDelete ctermfg=red ctermbg=237
" vim mustache http://git.io/vim-stash
let g:mustache_abbreviations = 1
" ┏━┓╺┳╸┏━┓╺┳╸╻ ╻┏━┓╻ ╻┏┓╻┏━╸
" ┗━┓ ┃ ┣━┫ ┃ ┃ ┃┗━┓┃ ┃┃┗┫┣╸
" ┗━┛ ╹ ╹ ╹ ╹ ┗━┛┗━┛┗━╸╹╹ ╹┗━╸
" lightline http://git.io/lightline
" █▓▒░ wizard status line
set laststatus=2
let g:lightline = {
\ 'colorscheme': 'sourcerer',
\ 'active': {
\ 'left': [ [ 'filename' ],
\ [ 'readonly', 'fugitive' ] ],
\ 'right': [ [ 'percent', 'lineinfo' ],
\ [ 'fileencoding', 'filetype' ],
\ [ 'fileformat', 'syntastic' ] ]
\ },
\ 'component_function': {
\ 'modified': 'WizMod',
\ 'readonly': 'WizRO',
\ 'fugitive': 'WizGit',
\ 'filename': 'WizName',
\ 'filetype': 'WizType',
\ 'fileformat' : 'WizFormat',
\ 'fileencoding': 'WizEncoding',
\ 'mode': 'WizMode',
\ },
\ 'component_expand': {
\ 'syntastic': 'SyntasticStatuslineFlag',
\ },
\ 'component_type': {
\ 'syntastic': 'error',
\ },
\ 'separator': { 'left': '▓▒░', 'right': '░▒▓' },
\ 'subseparator': { 'left': '▒', 'right': '░' }
\ }
function! WizMod()
return &ft =~ 'help\|vimfiler' ? '' : &modified ? '»' : &modifiable ? '' : ''
endfunction
function! WizRO()
return &ft !~? 'help\|vimfiler' && &readonly ? 'x' : ''
endfunction
function! WizGit()
if &ft !~? 'help\|vimfiler' && exists("*fugitive#head")
return fugitive#head()
endif
return ''
endfunction
function! WizName()
return ('' != WizMod() ? WizMod() . ' ' : '') .
\ ('' != expand('%:t') ? expand('%:t') : '[none]')
endfunction
function! WizType()
return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype : '') : ''
endfunction
function! WizFormat()
return ''
endfunction
function! WizEncoding()
return winwidth(0) > 70 ? (strlen(&fenc) ? &enc : &enc) : ''
endfunction
augroup AutoSyntastic
autocmd!
autocmd BufWritePost *.c,*.cpp call s:syntastic()
augroup END
function! s:syntastic()
SyntasticCheck
call lightline#update()
endfunction