Files
dotfiles/vimrc

360 lines
7.3 KiB
VimL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" 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 <leader>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 <nop>
" }}}
" 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 <silent> <leader>r :redraw!<CR>
" 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 <leader>e :e <C-R>=expand("%:p:h") . '/'<CR>
" Fuzzy find files
nnoremap <silent> <Leader><space> :CtrlP<CR>
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 <silent> * :call VisualSelection('f', '')<CR>
vnoremap <silent> # :call VisualSelection('b', '')<CR>
" }}}
" 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 <c-h> <c-w>h
noremap <c-k> <c-w>k
noremap <c-j> <c-w>j
noremap <c-l> <c-w>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 <silent> <leader>h. :call Pointfree()<CR>
function! Pointful()
call setline('.', split(system('pointful '.shellescape(join(getline(a:firstline, a:lastline), "\n"))), "\n"))
endfunction
vnoremap <silent> <leader>h> :call Pointful()<CR>
" }}}
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