" General {{{ " Sets how many lines of history VIM has to remember set history=700 " Set to auto read when a file is changed from the outside set autoread " With a map leader it's possible to do extra key combinations " like w saves the current file let mapleader = "," let g:mapleader = "," " Leader key timeout set tm=2000 " Allow the normal use of "," by pressing it twice noremap ,, , " Use par for prettier line formatting set formatprg="PARINIT='rTbgqR B=.,?_A_a Q=_s>|' par\ -w72" " Kill the damned Ex mode. nnoremap Q " }}} " Vundle {{{ set nocompatible filetype off set rtp+=~/.vim/bundle/vundle call vundle#rc() " let Vundle manage Vundle " required! Bundle 'gmarik/vundle' " Support bundles Bundle 'scrooloose/syntastic' " Other programming languages "Bundle 'zepto-lang/zepto-vim' Bundle 'hellerve/carp-vim' "Bundle 'tikhomirov/vim-glsl' "Plugin 'rust-lang/rust.vim' "Plugin 'isRuslan/vim-es6' "Plugin 'JuliaEditorSupport/julia-vim' " Extra Plugin 'editorconfig/editorconfig-vim' " }}} " VIM user interface {{{ " Turn on the WiLd menu set wildmenu " Tab-complete files up to longest unambiguous prefix set wildmode=list:longest,full " Always show current position set ruler " Show trailing whitespace set list " But only interesting whitespace if &listchars ==# 'eol:$' set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+ endif " Height of the command bar set cmdheight=1 " Configure backspace so it acts as it should act set backspace=eol,start,indent set whichwrap+=<,>,h,l " Ignore case when searching set ignorecase " When searching try to be smart about cases set smartcase " Highlight search results set hlsearch " Makes search act like search in modern browsers set incsearch " Don't redraw while executing macros (good performance config) set lazyredraw " For regular expressions turn magic on set magic " Show matching brackets when text indicator is over them set showmatch " How many tenths of a second to blink when matching brackets set mat=2 " No annoying sound on errors set noerrorbells set vb t_vb= if &term =~ '256color' " disable Background Color Erase (BCE) so that color schemes " render properly when inside 256-color tmux and GNU screen. " see also http://snk.tuxfamily.org/log/vim-256color-bce.html set t_ut= endif " Force redraw map r :redraw! " Default to mouse mode on set mouse=a " }}} " Enable syntax highlighting syntax enable " Enable filetype plugins filetype plugin on filetype indent on " Use same color behind concealed unicode characters hi clear Conceal " Set paste mode and use system clipboard set paste set clipboard=unnamed set t_Co=256 " Set utf8 as standard encoding and en_US as the standard language set encoding=utf8 " Use Unix as the standard file type set ffs=unix,dos,mac " Use large font by default in MacVim set gfn=Monaco:h19 " }}} " Files, backups and undo {{{ " Turn backup off, since most stuff is in Git anyway... set nobackup set nowb set noswapfile " Source the vimrc file after saving it augroup sourcing autocmd! autocmd bufwritepost .vimrc source $MYVIMRC augroup END " Open file prompt with current path nmap e :e =expand("%:p:h") . '/' " Fuzzy find files nnoremap :CtrlP let g:ctrlp_max_files=0 let g:ctrlp_show_hidden=1 let g:ctrlp_custom_ignore = { 'dir': '\v[\/](.git)$' } " }}} " Text, tab and indent related {{{ " Use spaces instead of tabs set expandtab " Be smart when using tabs ;) set smarttab " 1 tab == 2 spaces set shiftwidth=2 set tabstop=2 " Linebreak on 500 characters set lbr set tw=500 set ai "Auto indent set si "Smart indent set wrap "Wrap lines " }}} " Visual mode related {{{ " Visual mode pressing * or # searches for the current selection " Super useful! From an idea by Michael Naumann vnoremap * :call VisualSelection('f', '') vnoremap # :call VisualSelection('b', '') " }}} " Moving around, tabs, windows and buffers {{{ " Treat long lines as break lines (useful when moving around in them) nnoremap j gj nnoremap k gk noremap h noremap k noremap j noremap l " Return to last edit position when opening files (You want this!) augroup last_edit autocmd! autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END " Remember info about open buffers on close set viminfo^=% " don't close buffers when you aren't displaying them set hidden " }}} " Status line {{{ let g:mode_map={ \ '__' : '------', \ 'c' : 'COMMAND', \ 'i' : 'INSERT', \ 'ic' : 'INSERT COMPL', \ 'ix' : 'INSERT COMPL', \ 'n' : 'NORMAL', \ 'ni' : '(INSERT)', \ 'no' : 'OP PENDING', \ 'R' : 'REPLACE', \ 'Rv' : 'V REPLACE', \ 's' : 'SELECT', \ 'S' : 'S-LINE', \ '' : 'S-BLOCK', \ 't' : 'TERMINAL', \ 'v' : 'VISUAL', \ 'V' : 'V-LINE', \ '' : 'V-BLOCK', \ } let g:mode_color_map={ \ '__' : 'magenta', \ 'c' : 'red', \ 'i' : '208', \ 'ic' : '208', \ 'ix' : '208', \ 'n' : 'white', \ 'ni' : '208', \ 'no' : 'red', \ 'R' : '135', \ 'Rv' : '135', \ 's' : '135', \ 'S' : '135', \ '' : '135', \ 't' : 'white', \ 'v' : '135', \ 'V' : '135', \ '' : '135', \ } function! GetMode() let col=get(g:mode_color_map, mode(), mode()) exec printf("hi StatusLine ctermbg=%s", col) return get(g:mode_map, mode(), mode()) endfunction set statusline=%{GetMode()}\ \ \ \ %.20f\ %m\ %r%=%v\ %l\/%L\ \(%2p%%\)\ %y "set statusline=%y " Always show the status line set laststatus=2 " }}} " Editing mappings {{{ " Delete trailing white space on save func! DeleteTrailingWS() exe "normal mz" %s/\s\+$//ge exe "normal `z" endfunc augroup whitespace autocmd! autocmd BufWrite *.hs :call DeleteTrailingWS() augroup END " }}} " Helper functions {{{ function! CmdLine(str) exe "menu Foo.Bar :" . a:str emenu Foo.Bar unmenu Foo endfunction function! VisualSelection(direction, extra_filter) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '\\/.*$^~[]') let l:pattern = substitute(l:pattern, "\n$", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" elseif a:direction == 'gv' call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.' . a:extra_filter) elseif a:direction == 'replace' call CmdLine("%s" . '/'. l:pattern . '/') elseif a:direction == 'f' execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction " }}} " Tags {{{ set tags=tags;/,codex.tags;/ " }}} " Conversion {{{ function! Pointfree() call setline('.', split(system('pointfree '.shellescape(join(getline(a:firstline, a:lastline), "\n"))), "\n")) endfunction vnoremap h. :call Pointfree() function! Pointful() call setline('.', split(system('pointful '.shellescape(join(getline(a:firstline, a:lastline), "\n"))), "\n")) endfunction vnoremap h> :call Pointful() " }}} let g:syntastic_carp_checkers = ['carp'] command Cr !carp -x % let g:syntastic_python_checkers = ['python'] let g:syntastic_python_python_exec = '/usr/local/bin/python3' let g:syntastic_haskell_hlint_args = "-i 'Eta reduce'" let g:syntastic_always_populate_loc_list = 1