" VIM CORE set nocompatible " enable advanced features set autochdir " current dir is vim workdir set wildmenu " complete all filetypes set mouse=v " don't interract with the mouse set laststatus=2 " always show the status line set keywordprg=":help" " show vim help when hitting "K" set backspace=indent,eol,start " make backspace like in a normal editor set ttimeout " set timeout for key combinations to on set ttimeoutlen=50 " set timeout for key combinations to 50ms set number " enable line numbers "set relativenumber " enable relative line numbers (slow) "set cursorline " highlight line number + line with cursor (slow) set lazyredraw set spelllang=de,en syntax enable " enable syntax plugin (builtin) filetype plugin indent on " load indent and plugin based on filetype " INDENTATION set autoindent " start new lines on same indent level set smartindent " smart indentation for programming languages set breakindent " visually wrapped lines will respect the indent level set cindent " smart indentation for C programming set formatprg=par\ -B+.,\\-\\!\\?\\\"\\\'\\*\\<\ -w72qie " SEARCH set incsearch " search while typing set hlsearch " highlight all search matches set wrapscan " search continues on top set ignorecase " search case insensitive set smartcase " search case sensitive once a capital letter is used " SPACES (TABS) set tabstop=4 " one tab counts X spaces (used by retab) set softtabstop=4 set shiftwidth=4 " number of spaces used to indent set expandtab " use spaces when hitting set smarttab " if the line starts with space, backspace will delete "shiftwidth" set textwidth=0 set list set listchars=tab:>- let c_space_errors=1 " FOLDING set foldmethod=indent " Fold at indent level set foldnestmax=3 " Fold max 3 levels deep set foldlevel=1 set foldlevelstart=10 " Start to fold at level 0 " TEMPORARY FILES set undofile " save undo history, so it can be restored after reopening a file set undodir=~/.vim/undo// " save undo history here (don't clutter the filesystem) set backup " create backups set backupcopy=yes set backupdir=~/.vim/backup// " save backup files here (don't clutter the filesystem) set backupskip=mutt-* " do not create backups of emails set directory=~/.vim/swapfiles// " move swapfiles out of the way " LOOK N FEEL set t_Co=256 " for terminal with 256 colors set background=dark " I prefer dark backgrounds highlight Normal ctermbg=NONE guibg=#181818 " transparent background (terminal), sane color (gui) highlight SpellBad cterm=NONE ctermfg=darkred ctermbg=NONE " make spellcheck work with cursorline (set fg color) highlight ColorColumn72 ctermfg=03 call matchadd('ColorColumn72', '\%72v', 100) " highlight column 78 in green match ErrorMsg '\(TODO\|FIXME\|OPTIMIZE\|BUG\|workaround\|WTF\)' " highlight code comment keywords " VIMDIFF COLOR FIX highlight DiffAdd cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffText cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red " CURSOR let &t_SI = "\e[6 q" " change cursor to ibeam in inser mode let &t_EI = "\e[2 q" " change cursort to block in normal mode " GRAPHICAL VIM / GVIM set guifont=Fira\ Code\ 13 " Use this font in gvim set guioptions= " don't show any gui elements " TAB NAVIGATION set tabpagemax=25 " allowed max tabs (10) inoremap [5^ :tabn " Strg+PgUp: Next tab nnoremap [5^ :tabn inoremap [6^ :tabp " Strg+PgDown: Previous tab nnoremap [6^ :tabp inoremap  :tabnew " Strg+T: New tab nnoremap  :tabnew " SCREEN FIXES map [7~ imap [7~ nmap [7~ map [8~ imap [8~ nmap [8~ map [5~ imap [5~ nmap [5~ map [6~ imap [6~ nmap [6~ " NETRW let g:netrw_banner = 0 " disable annoying banner let g:netrw_browse_split = 4 " open in prior window let g:netrw_altv = 1 " open splits to the right let g:netrw_liststyle = 3 " tree view " TAGS FILE set tags=./tags; " Search for tags file backwards recursive nnoremap gt " Jump to tag (go tag) nnoremap gb " Jump to last position (go back) nmap gh :FSHere " Jump to corresponding header file (go header) " SUDO SAVE cmap w!! w !sudo tee > /dev/null " REMEMBER LAST CURSOR POSITION if has("autocmd") au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif " OPEN HELP IN A NEW TAB command! -nargs=1 -complete=help H :tabnew | :set buftype=help | :h " NAVIGATE ON VISUAL LINES (SOFT WRAP) imap gj imap gk nmap gj nmap gk " USE ARROW / VIM KEYS INSIDE OMNIBOX inoremap j pumvisible() ? '' : 'j' inoremap k pumvisible() ? '' : 'k' inoremap pumvisible() ? '' : '' inoremap pumvisible() ? '' : '' " AUTO BRACKET inoremap { { } " TREAT C FILES AS C, NOT C++ augroup project autocmd! autocmd BufRead,BufNewFile *.h,*.c set filetype=c.doxygen augroup END function! Copy() :'<,'>w! /tmp/vimcopy.txt endfunction function! Paste() :r /tmp/vimcopy.txt endfunction au BufReadPost * if getfsize(bufname("%")) > 512*1024 | \ set syntax= | \ set nonumber | \ endif