configuration/vim/vimrc

369 lines
8.8 KiB
VimL

" Vundle plugins {{{
" ============================================================================ "
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'bling/vim-airline'
Plugin 'scrooloose/nerdtree'
Plugin 'Shougo/vimproc.vim'
Plugin 'tpope/vim-markdown'
Plugin 'altercation/vim-colors-solarized'
Plugin 'chriskempson/base16-vim'
Plugin 'Valloric/YouCompleteMe'
Plugin 'junegunn/vim-easy-align'
"Plugin 'LaTeX-Box-Team/LaTeX-Box'
Plugin 'chase/vim-ansible-yaml'
Plugin 'rust-lang/rust.vim'
Plugin 'easymotion/vim-easymotion'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" Put your non-Plugin stuff after this line
" Configuring NerdTree
noremap <C-t> :NERDTreeToggle<CR><CR>
let NERDTreeIgnore=[
\ ".*\\.class$",
\ ".*\\.o$",
\ ".*\\.hi$",
\ ".*\\.pyc$"
\ ]
let mapleader=';'
" Configuring ctrlp
nnoremap <Leader>l :CtrlP<CR>
noremap <C-p> :CtrlP<CR>
nnoremap <Leader>o :CtrlPBuffer<CR>
noremap <C-o> :CtrlPBuffer<CR>
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
" Configuring Airline
let g:airline_powerline_fonts=1
" Configuring YouCompleteMe
let g:ycm_global_ycm_extra_conf = '~/.vim/ycm_extra_conf.py'
let g:ycm_server_keep_logfiles = 1
let g:ycm_server_log_level = 'debug'
set completeopt=menu
" Loading Solarized
set t_Co=256
let g:solarized_termcolors=256
let g:solarized_contrast="normal"
let g:solarized_underline=0
let g:solarized_termtrans=1
" Loaing base16
let base16colorspace=256
" Configuring LaTeX-Box
"let g:LatexBox_Folding = 1
" Configuring EasyMotion
let g:EasyMotion_do_mapping = 0 " Disable default mappings
nmap <Leader>w <Plug>(easymotion-w)
nmap <Leader>s <Plug>(easymotion-s)
nmap <Leader>j <Plug>(easymotion-j)
nmap <Leader>k <Plug>(easymotion-k)
" }}}
" General Options {{{
" ================================================================== "
syntax enable
set background=dark
colorscheme desert
silent! colorscheme base16-3024 " conditional colorscheme
set number " line numbers on the right side
set showcmd " show the commands while typing
set splitright " open new splits on the right
set splitbelow " open new splits below
set autoread " autoreload file on change
set scrolloff=8 " keep the cursor 8 lines away from the top/bottom
set ruler " show the lines/% bottomright
set encoding=utf-8 " set default encoding
set laststatus=2 " always show the status line
" wrap lines at 70 characters
set formatprg=par\ -w70
set formatoptions=tcrqnlj
set textwidth=70
" indentation
set tabstop=4 " tab is 4 width
set softtabstop=4 " tab is 4 width
set shiftwidth=4 " for use with > and <
set expandtab " tab key puts spaces
set autoindent " in case filetype indent is wrong
filetype plugin indent on
set list " if tabs, show them with 2 spaces
set listchars=tab:\·\ ,trail
" display tabs with a leading \cdot
" trailing whitespace looks like \cdot
" Don't save tmp/swap files in the current directory.
set directory=~/.vim/tmp/swap/
set backupdir=~/.vim/tmp/backup/
" Learning to use decent vim.
noremap <Up> <NOP>
noremap <Down> <NOP>
noremap <Left> <NOP>
noremap <Right> <NOP>
" Keep selection after indenting
vnoremap > >gv
vnoremap < <gv
" some shortcuts
" go to start of line
noremap H ^
" go to end of line
noremap L g_
" fuck you K
noremap K <nop>
" center screen with <space>
noremap <space> zz
" rewrite file with sudo
cmap w!! w !sudo tee % >/dev/null
" paste the clipboard
noremap <Leader>p :r!xclip -sel c -o<CR><CR>
noremap <Leader>y :w !xclip -sel c<CR><CR>
" Unfold everything upon opening a new file
"autocmd BufRead * normal zR
set foldlevelstart=2
" }}}
" Filetype specific configuration. {{{
" ================================================================== "
" Haskell {{{
" ------------------------------------------------------------------ "
autocmd FileType haskell call HaskellHook()
autocmd BufRead,BufNewFile *.lhs call HaskellHook()
autocmd BufRead,BufNewFile *.hsc set filetype=haskell
function HaskellHook()
" Ghci shortcut
noremap <C-i> :!ghci -Wall '%'<CR><CR>
" Haskell Styling
noremap <C-c> :%!stylish-haskell<CR>
noremap <C-x> :!hlint %<CR>
" Vim-hoogle
noremap <C-h> :Hoogle
noremap <C-j> :HoogleClose<CR>
endfunction
" }}}
" Java {{{
" ------------------------------------------------------------------ "
autocmd FileType java call JavaHook()
function JavaHook()
" Javac shortcut
noremap <C-c> :!javac %<CR>
" Java shortcut
noremap <C-i> :!java %:r<CR>
endfunction
" }}}
" Shell {{{
" ------------------------------------------------------------------ "
autocmd FileType sh call ShellHook()
function ShellHook()
" Execute in subshell
noremap <C-i> :!bash --init-file ./%<CR><CR>
endfunction
" }}}
" C {{{
" ------------------------------------------------------------------ "
autocmd FileType c call CHook()
function CHook()
" gcc shortcut
noremap <C-c> :!gcc % -o %:r<CR>
" execute
noremap <C-i> :!./%:r<CR>
endfunction
" }}}
" JavaScript {{{
" ------------------------------------------------------------------ "
autocmd FileType javascript call JavaScriptHook()
function JavaScriptHook()
setlocal tabstop=2
setlocal shiftwidth=2
setlocal softtabstop=2
endfunction
" }}}
" Ruby {{{
" ------------------------------------------------------------------ "
autocmd FileType ruby call RubyHook()
autocmd FileType eruby call RubyHook()
function RubyFold(lnum)
if getline(a:lnum) =~ '^\s*def\s' || getline(a:lnum) =~ '^\s*class\s' || getline(a:lnum) =~ '^\s*module\s'
return indent(a:lnum) / 2 + 1
endif
if getline(a:lnum) =~ '^\s*end'
return indent(a:lnum) / 2 + 1
endif
if getline(a:lnum - 1) =~ '^\s*end'
return indent(a:lnum - 1) / 2
endif
return '='
endfunction
function RubyFoldText()
return getline(v:foldstart) . ' +'
endfunction
function RubyHook()
setlocal tabstop=2
setlocal shiftwidth=2
set softtabstop=2
noremap <C-i> :!irb -Ilib -r ./%<CR><CR>
" Use rake as makeprogram
set makeprg=rake
" Folding
set foldmethod=expr
set foldexpr=RubyFold(v:lnum)
set foldtext=RubyFoldText()
endfunction
" }}}
" R {{{
" ------------------------------------------------------------------ "
autocmd FileType r call RHook()
function RHook()
" Interactive shortcut
noremap <C-i> :'<,'>w !R --no-save --interactive<CR><CR>
endfunction
" }}}
" Latex {{{
" ------------------------------------------------------------------ "
autocmd FileType tex call TexHook()
function TexHook()
setlocal tabstop=2
setlocal shiftwidth=2
setlocal softtabstop=2
" setlocal foldmethod=marker
" Make a pdf
noremap <C-c> :!pdflatex -shell-escape '%'<CR><CR>
noremap <C-i> :!rifle '%:p:r.pdf'<CR><CR>
endfunction
" }}}
" Markdown {{{
" ------------------------------------------------------------------ "
autocmd Filetype markdown call MarkdownHook()
function MarkdownHook()
" Making and showing html
noremap <C-c> :!markdown '%:p' > '%:p:r.html'<CR><CR>
noremap <C-i> :!rifle '%:p:r.html'<CR><CR>
setlocal textwidth=0
setlocal wrapmargin=0
setlocal colorcolumn=0
setlocal wrap
setlocal linebreak
setlocal nolist
endfunction
" }}}
" Python {{{
" ------------------------------------------------------------------ "
autocmd FileType python call PythonHook()
function Pylint()
silent !pylint --reports=n --output-format=parseable '%' > errors.err 2> /dev/null
cfile
silent !rm errors.err
redraw!
copen
endfunction
function PythonFold(lnum)
if getline(a:lnum-1) =~ '^\s*def\s' || getline(a:lnum-1) =~ '^\s*class\s'
return indent(a:lnum-1) / 4 + 1
endif
if getline(a:lnum) =~ '^\s*def\s' || getline(a:lnum) =~ '^\s*class\s'
return indent(a:lnum) / 4
endif
if getline(a:lnum+1) =~ '^\s*def\s' || getline(a:lnum+1) =~ '^\s*class\s'
return indent(a:lnum + 1) / 4
endif
if getline(a:lnum+1) =~ '^\S.*$'
return '0'
endif
return '='
endfunction
function PythonFoldText()
return repeat(' ', indent(v:foldstart - 1) + 4) . '+'
endfunction
function PythonHook()
set formatoptions+=rq
noremap <C-i> :!python -i '%'<CR><CR>
noremap <C-x> :call Pylint()<CR>
" Uncomment to fold. Slows down SuperTab extremely
set foldmethod=expr
set foldexpr=PythonFold(v:lnum)
set foldtext=PythonFoldText()
endfunction
" }}}
" }}}
" vim: foldmethod=marker