" vim: et sts=2 sw=2 " " " You are about to experience a potent dosage of Vim. Watch your steps. " " ╔══════════════════════════════════════════╗ " ║ ⎋ HERE BE VIMPIRES ⎋ ║ " ╚══════════════════════════════════════════╝ " " plug {{{1 call plug#begin('~/.vim/bundle') Plug 'Keithbsmiley/investigate.vim' Plug 'Lokaltog/vim-easymotion', { 'on': '(easymotion-s2)' } Plug 'chrisbra/unicode.vim', { 'on': ['(UnicodeComplete)', '(UnicodeGA)', 'UnicodeTable'] } Plug 'fatih/vim-go', { 'for': 'go' } Plug 'godlygeek/csapprox', { 'for': 'fugitiveblame' } Plug 'junegunn/fzf', { 'on': 'FZF', 'dir': '~/local/fzf' } Plug 'junegunn/vim-easy-align', { 'on': '(LiveEasyAlign)' } Plug 'junegunn/vim-github-dashboard', { 'on': ['GHDashboard', 'GHActivity'] } Plug 'junegunn/vim-peekaboo' Plug 'lervag/vimtex', { 'for': 'tex' } Plug 'majutsushi/tagbar', { 'on': 'TagbarToggle' } Plug 'mbbill/undotree', { 'on': 'UndotreeToggle' } Plug 'noahfrederick/vim-hemisu' Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'tpope/vim-commentary' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-rsi' Plug 'tpope/vim-surround' Plug 'wting/rust.vim', { 'for': 'rust' } " Plug '/data/github/nvim-builder' Plug '/data/github/nvim-erlang_rocks', { 'for': 'erlang' } " Plug '/data/github/nvim-grepper' Plug '/data/github/vim-janah' " Plug '/data/github/vim-profiling' Plug '/data/github/vim-randomtag', { 'on': 'Random' } Plug '/data/github/vim-sayonara', { 'on': 'Sayonara' } Plug '/data/github/vim-signify' Plug '/data/github/vim-startify' call plug#end() " init {{{1 filetype plugin indent on syntax on "autocmd BufReadPre *.asm let b:asmsyntax = 'nasm' "let b:asmsyntax = 'armasm' let s:mac = has('mac') " set {{{1 " indent settings set autoindent set cinoptions =>4,l1,p0,)50,*50,t0 set expandtab set shiftwidth =4 set softtabstop =4 " backup/swap/info/undo settings set backup set backupdir =$HOME/.vim/files/backup/ set backupext =-vimbackup set backupskip = set directory =$HOME/.vim/files/swap// set undodir =$HOME/.vim/files/undo/ set undofile set updatecount =100 set viminfo ='100,n$HOME/.vim/files/info/viminfo " better navigation set cursorline set foldmethod =marker set foldtext =Foldy() set hlsearch set ignorecase set incsearch set mouse =a set scrolloff =4 set sidescroll =5 set smartcase " misc settings set autoread set backspace =indent,eol,start set clipboard =unnamed set complete -=i set cpoptions -=e set diffopt =filler,vertical,foldcolumn:0 set fileformats =unix,dos,mac set hidden set history =10000 set lazyredraw set more set mousemodel =popup set noautowrite set noautowriteall set noequalalways set noerrorbells set nofsync set nojoinspaces set nrformats =hex set pastetoggle = set relativenumber set report =0 " set sessionoptions-=options set shiftround set showfulltag set showtabline =1 set smarttab set splitbelow set splitright set switchbuf =useopen,usetab set synmaxcol =200 set timeout set timeoutlen =1000 set titlestring =VIM:\ %f set ttimeout set ttimeoutlen =10 set ttyfast set virtualedit =onemore,block set whichwrap =h,l " wild stuff set suffixes +=.a,.1,.class set wildignore +=*.o,*.so,*.zip,*.png set wildmenu set wildmode =list,full set wildoptions =tagfile " display settings set display =lastline set laststatus =2 set list set modeline set modelines =1 set nostartofline set numberwidth =1 set ruler set shortmess =aoOTI set showcmd set showmatch set showmode " spelling set spellfile =~/.vim/spell/en.utf-8.add,~/.vim/spell/de.utf-8.add set spelllang =en,de " breaking set wrap set linebreak set breakindent set breakindentopt=min:40 "set highlight +=@:SpecialKey set cpoptions =aABcefFqsZ set formatoptions =tcrqnj if has('multi_byte') && &encoding ==# 'utf-8' let &listchars = 'tab:▸ ,extends:❯,precedes:❮,nbsp:±' let &fillchars = 'diff:▚' let &showbreak = '↪ ' highlight VertSplit ctermfg=242 augroup mylist autocmd! autocmd InsertEnter * set listchars-=trail:⣿ autocmd InsertLeave * set listchars+=trail:⣿ augroup END else let &listchars = 'tab:> ,extends:>,precedes:<,nbsp:.' let &fillchars = 'stlnc:#' let &showbreak = '-> ' augroup mylist autocmd! autocmd InsertEnter * set listchars-=trail:. autocmd InsertLeave * set listchars+=trail:. augroup END endif if executable('ag') let &grepprg = 'command ag --nogroup --nocolor' endif " mapping {{{1 digraph ./ 8230 let mapleader = ';' nnoremap \ ; nmap ga (UnicodeGA) nnoremap gl imap (UnicodeComplete) nnoremap :NERDTreeToggle nnoremap :TagbarToggle nnoremap :UndotreeToggle nnoremap :GHDashboard! mhinz nnoremap :GHActivity! mhinz nnoremap :Make nnoremap :Dispatch nnoremap :Start nnoremap :let g:stl_group_info = !get(g:, 'stl_group_info') nnoremap :set spell! nnoremap K :grep! "\b\b":cwindow nnoremap :FileInfo nnoremap :FZF inoremap u inoremap jf inoremap tab_yeah("\", "\") inoremap =repeat(complete(col('.'),map(["%Y-%m-%d %H:%M:%S","%a, %d %b %Y %H:%M:%S %z","%Y %b %d","%d-%b-%y","%a %b %d %T %Z %Y"],'strftime(v:val)')+[localtime()]),0) inoremap =repeat(complete(col('.'),['mh.codebro@gmail.com','hinz@campus.tu-berlin.de','mhinz@mailbox.tu-berlin.de']),0) nnoremap ev :tabnew $MYVIMRC nnoremap rv :source $MYVIMRC nnoremap rr :source % nnoremap n v:searchforward ? 'nzvzz' : 'Nzvzz' nnoremap N v:searchforward ? 'Nzvzz' : 'nzvzz' nnoremap gg ggzv nnoremap G Gzv nnoremap [q :cprevious nnoremap ]q :cnext nnoremap [Q :cfirst nnoremap ]Q :clast nnoremap [l :lprevious nnoremap ]l :lnext nnoremap [L :lfirst nnoremap ]L :llast nnoremap [b :bprevious nnoremap ]b :bnext nnoremap [B :bfirst nnoremap ]B :blast nnoremap [t :tabprevious nnoremap ]t :tabnext nnoremap [T :tabfirst nnoremap ]T :tablast nnoremap h nnoremap j nnoremap k nnoremap l onoremap gv :normal! gv xnoremap < >gv nnoremap } }zz nnoremap { {zz nnoremap ]] ]]zz nnoremap [[ [[zz nnoremap [] []zz nnoremap ][ ][zz nnoremap g; g;zvzz nnoremap g, g,zvzz nnoremap Q gqap nnoremap M :='let @'. v:register .' = '. string(getreg(v:register)) nnoremap j nnoremap v `[v`] nnoremap f :FZF nnoremap g :Grep nnoremap q :Sayonara nnoremap Q :Sayonara! nnoremap w :update nnoremap x :xit nnoremap l :noh:diffupdate:syntax sync fromstart nnoremap ' ` nnoremap ` ' nnoremap nmap &ft == 'vim' && &bt == 'nofile' ? '' : (exists('g:cscoped') ? 'cg' : 'g') cnoremap cnoremap cnoremap r $VIMRUNTIME/ cnoremap ft ~/.vim/after/ftplugin/ xnoremap * :call search()// xnoremap # :call search()?? xnoremap * :silent! execute search_all() if has('nvim') tnoremap tnoremap h tnoremap j tnoremap k tnoremap l nnoremap h nnoremap j nnoremap k nnoremap l endif " let &t_SI = "\[4 q" if !empty($TMUX) nnoremap nnoremap a let &t_SI = "\Ptmux;\\]50;CursorShape=1\x7\\\" let &t_EI = "\Ptmux;\\]50;CursorShape=0\x7\\\" else let &t_SI = "\]50;CursorShape=1\x7" let &t_EI = "\]50;CursorShape=0\x7" endif " autocmd {{{1 augroup myvimrc au! au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe 'normal! g`"zvzz' | endif au BufEnter * Cd au BufEnter *.txt if &bt == 'help' | call s:helpme() | endif au BufLeave *.h mark H au BufLeave *.{c,cpp} mark C au BufRead,BufNewFile *.[sS] let b:asmsyntax = 'gas' au BufRead,BufNewFile *.adoc setfiletype asciidoc au BufRead,BufNewFile *.{md,mkd} setlocal ft=markdown tw=80 au BufRead,BufNewFile /data/repo/neovim/* setlocal et sts=2 sw=2 cino=>2,l1,p0,)50,*50,t0 au BufRead,BufNewFile /data/repo/vim/* setlocal noet au BufRead,BufNewFile /data/repo/vim/src/*.[ch] setlocal sw=4 sts=4 au BufRead,BufNewFile /data/uni/techgi2/*.{s,asm} setlocal ft=mips au BufRead,BufNewFile Makefile.*,local.mk setfiletype make | setl noet au BufReadPost fugitive:// setlocal bufhidden=delete au BufWritePost ~/.Xdefaults redraw | echo system('xrdb ' . expand('')) au VimEnter * if isdirectory(expand('')) | Ex | endif au User fugitive \ if fugitive#buffer().type() =~# '^\%(tree\|blob\)$' | \ nnoremap .. :edit %:h | \ endif au BufReadPost * if &bin | silent! exe '%!xxd' | setlocal filetype=xxd | endif au BufWritePre * if &bin | silent! exe '%!xxd -r' | endif au BufWritePost * if &bin | silent! exe '%!xxd' | setlocal nomodified | endif augroup END " commands {{{1 command! -bar -nargs=* -complete=help H helpgrep command! -bar -nargs=+ -complete=file Ag silent! grep! | cwindow | redraw! command! -bar -bang -complete=dir Cd call s:cd(0) command! -bar Scriptnames call scratch('scriptnames') | sil keepp g/^$/d command! -bar -nargs=1 -complete=command Scratch call scratch() command! -bar CleanSpell runtime! spell/cleanadd.vim command! -bar FileInfo echo printf("%s%s [%d,%d/%d] --%d%%--", \ expand('%:p'), \ &modified ? '[+]' : '', \ col('.'), \ line('.'), \ line('$'), \ float2nr(line('.') / (line('$') / 100.0)) \ ) " functions {{{1 function! s:helpme() abort if winnr('$') == 2 wincmd L else wincmd T endif endfunction function! s:cd(bang) abort if &buftype =~# '\v(nofile|terminal)' || expand('%') =~# '^fugitive' return endif if !exists('s:cache') let s:cache = {} endif let dirs = [ '.git', '.hg', '.svn' ] let curdir = resolve(expand('%:p:h')) if !isdirectory(curdir) echohl WarningMsg | echo 'No such directory: '. curdir | echohl NONE return endif if has_key(s:cache, curdir) execute (a:bang ? 'cd' : 'lcd') s:cache[curdir] return endif for dir in dirs let founddir = finddir(dir, curdir .';') if !empty(founddir) break endif endfor let dir = empty(founddir) ? curdir : resolve(fnamemodify(founddir, ':p:h:h')) let s:cache[curdir] = dir execute (a:bang ? 'cd' : 'lcd') fnameescape(dir) endfunction function! s:scratch(cmd) abort let more = &more set nomore try let lines = 1 redir => lines silent execute a:cmd finally redir END let &more = more endtry noautocmd new setlocal buftype=nofile bufhidden=hide noswapfile silent put =lines 1 nnoremap q :q endfunction function! s:tab_yeah(new, default) let line = getline('.') let col = col('.') - 2 if !empty(line) && line[col] =~ '\k' && line[col + 1] !~ '\k' return a:new else return a:default endif endfunction function! Foldy() let linelen = &tw ? &tw : 80 let marker = strpart(&fmr, 0, stridx(&fmr, ',')) . '\d*' let range = foldclosedend(v:foldstart) - foldclosed(v:foldstart) + 1 let left = substitute(getline(v:foldstart), marker, '', '') let leftlen = len(left) let right = range . ' [' . v:foldlevel . ']' let rightlen = len(right) let tmp = strpart(left, 0, linelen - rightlen) let tmplen = len(tmp) if leftlen > len(tmp) let left = strpart(tmp, 0, tmplen - 4) . '... ' let leftlen = tmplen endif let fill = repeat(' ', linelen - (leftlen + rightlen)) return left . fill . right . repeat(' ', 100) endfunction function! s:search() abort let regsave = @@ normal! gvy let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\\n', 'g') let @@ = regsave endfunction function! s:search_all() abort call search() call setqflist([]) execute 'bufdo vimgrepadd! /'. @/ .'/ %' endfunction " colors {{{1 if has('gui_running') set background=light for scheme in ['gruvbox'] try execute 'colorscheme' scheme break catch endtry endfor set gcr =a:blinkoff0 set mousehide set guioptions =a " let &guifont = 'Bitstream Vera Sans Mono 9' " let &guifont = 'DejaVu Sans Mono 9' " let &guifont = 'Droid Sans Mono 9' let &guifont = 'Ubuntu Mono 11' command! Bigger :let &guifont = substitute(&guifont, '\d\+$', '\=submatch(0)+1', '') command! Smaller :let &guifont = substitute(&guifont, '\d\+$', '\=submatch(0)-1', '') else set background=dark augroup mycolors autocmd! autocmd ColorScheme janah \ highlight User1 ctermfg=192 ctermbg=237 cterm=NONE | \ highlight User2 ctermfg=167 ctermbg=237 cterm=NONE | \ highlight User3 ctermfg=245 ctermbg=237 cterm=NONE | \ highlight User4 ctermfg=215 ctermbg=237 cterm=NONE augroup END for scheme in ['janah', 'gruvbox', 'hemisu', 'desert'] try execute 'colorscheme' scheme break catch endtry endfor endif " statusline {{{1 function! SetStatusline() let stl = ' %4*%<%F%*' if exists('b:git_dir') let stl .= '%3*:%*' let branch = fugitive#head(8) let stl .= (branch == 'master') ? '%1*master%*' : '%2*'. branch .'%*' endif let stl .= \ '%m%r%h%w' \ . '%= ' \ . '%#ErrorMsg#%{&paste ? " paste " : ""}%*' \ . '%#WarningMsg#%{&ff != "unix" ? " ".&ff." ":""}%* ' \ . '%#warningmsg#%{&fenc != "utf-8" && &fenc != "" ? " ".&fenc." " :""}%* ' if get(g:, 'stl_group_info') let stl .= \ '%#WarningMsg#[' \ . '%{synIDattr(synIDtrans(synID(line("."),col("."),1)),"name")} ' \ . '%{synIDattr(synID(line("."),col("."),1),"name")}' \ . ']%* ' endif " let stl .= " \ '%Y ' " \ . '%3*[%*%v%3*,%*%l%3*/%*%L%3*]%* ' " \ . '%p%3*%%%* ' return stl endfunction set statusline=%!SetStatusline() " plugins {{{1 " plugins: misc {{{2 let g:is_bash = 1 let g:lisp_rainbow = 1 let g:loaded_2html_plugin = 1 let g:loaded_getscriptPlugin = 1 "let g:loaded_gzip = 1 let g:loaded_rrhelper = 1 let g:loaded_spellfile_plugin = 1 "let g:loaded_tarPlugin = 1 let g:loaded_vimballPlugin = 1 "let g:loaded_zipPlugin = 1 " plugins: netrw {{{2 " let g:loaded_netrwPlugin = 1 let g:netrw_banner = 0 let g:netrw_keepdir = 0 let g:netrw_liststyle = 1 let g:netrw_sort_options = 'i' " plugins: surround {{{2 let g:surround_indent = 1 let g:surround_{char2nr('e')} = "\\emph{\r}" let g:surround_{char2nr('-')} = "<% \r %>" let g:surround_{char2nr('8')} = "/* \r */" let g:surround_{char2nr('s')} = " \r" let g:surround_{char2nr('^')} = "/^\r$/" let g:surround_{char2nr('=')} = "== \r ==" " plugins: syntastic {{{2 let g:syntastic_enable_signs = 1 let g:syntastic_check_on_open = 0 let g:syntastic_enable_highlighting = 1 let g:syntastic_auto_jump = 0 let g:syntastic_quiet_messages = { 'level': 'warnings' } let g:syntastic_mode_map = { \ 'mode' : 'passive', \ 'active_filetypes' : [ 'c' ], \ 'passive_filetypes': [] \ } let g:syntastic_c_compiler_options = '-std=c11 -pedantic -Wall -Wextra -Wfloat-equal -ftrapv' let g:syntastic_cpp_compiler_options = '-std=c++11 -pedantic -Wall -Wextra -Weffc++' " plugins: tagbar {{{2 let g:tagbar_width = 40 let g:tagbar_autoclose = 0 let g:tagbar_autofocus = 1 let g:tagbar_compact = 1 " plugins: vim-easy-align {{{2 vmap (LiveEasyAlign) nmap a (LiveEasyAlign) " plugins: vim-easymotion {{{2 let g:EasyMotion_do_mapping = 0 let g:EasyMotion_do_shade = 1 let g:EasyMotion_inc_highlight = 0 let g:EasyMotion_landing_highlight = 0 let g:EasyMotion_off_screen_search = 0 let g:EasyMotion_smartcase = 0 let g:EasyMotion_startofline = 0 let g:EasyMotion_use_smartsign_us = 1 let g:EasyMotion_use_upper = 0 map (easymotion-s2) " map j (easymotion-j) " map k (easymotion-k) " plugins: vim-signify {{{2 let g:signify_vcs_list = [ 'git', 'hg' ] "let g:signify_skip_filetype = { 'help': 1 } "let g:signify_cursorhold_insert = 1 "let g:signify_cursorhold_normal = 1 " let g:signify_disable_by_default = 1 " let g:signify_line_highlight = 0 "let g:signify_update_on_bufenter = 1 " let g:signify_update_on_focusgained = 0 " function! RunOnModifiedLines(lnums) abort " for lnum in a:lnums " execute 'silent! '. lnum .'substitute/\s\+$//' " endfor " endfunction "let g:signify_action_on_modified_lines = 'RunOnModifiedLines' omap ic (signify-motion-inner-pending) xmap ic (signify-motion-inner-visual) omap ac (signify-motion-outer-pending) xmap ac (signify-motion-outer-visual) " plugins: vim-startify {{{2 let g:startify_list_order = [ \ [' MRU:'], \ 'files' , \ [' MRU (dir):'], \ 'dir', \ [' Sessions:'], \ 'sessions', \ [' Bookmarks:'], \ 'bookmarks', \ ] " autocmd User Startified nmap o (startify-open-buffers) " autocmd User Startified " \ execute 'nunmap i' | " \ setlocal modifiable | " \ autocmd InsertEnter enew let g:startify_relative_path = 0 let g:startify_files_number = 8 let g:startify_session_persistence = 0 let g:startify_session_autoload = 1 let g:startify_session_delete_buffers = 1 let g:startify_change_to_dir = 0 let g:startify_enable_special = 0 let g:startify_enable_unsafe = 0 " let g:startify_session_remove_lines = ['winheight', 'winwidth'] " let g:startify_custom_indices = ['f', 'g', 'h'] " let g:startify_custom_indices = map(range(1,100), 'string(v:val)') let g:startify_skiplist = [ \ 'COMMIT_EDITMSG', \ '\.fugitiveblame', \ $VIMRUNTIME .'/doc', \ 'bundle/.*/doc', \ '\.vimgolf', \ ] function! s:center_header(lines) abort let longest_line = max(map(copy(a:lines), 'len(v:val)')) let centered_lines = map(copy(a:lines), 'repeat(" ", (&columns / 2) - (longest_line / 2)) . v:val') return centered_lines endfunction let g:startify_custom_header = s:center_header(split(system('tips | '. (s:mac ? 'cowthink' : 'cowsay -f apt')), '\n')) " let g:startify_custom_footer = ['', " Vim is charityware. Please read ':help uganda'.", ''] "function! s:foo() "redir => var "silent! echomsg 'foo' "silent! echomsg 'bar' "silent! echomsg 'quux' "redir END "return map(split(var, '\n'), '" " . v:val') + [''] "endfunction "let g:startify_custom_header = s:foo() " let g:startify_session_savevars = ['g:foo'] " let g:startify_session_savecmds = [ 'colo molokai' ]