" VIM CORE set encoding=utf-8 let &titleold="term" set nocompatible " enable advanced features set autochdir " current dir is vim workdir set title " set xterm title set path+=.,** " expand to dirs under workdir 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 " bkspc behave like expected set ttimeout " activate timeout for key combos set ttimeoutlen=50 " set timeout for key combinations set ttyfast set number " enable line numbers set numberwidth=6 " space for more numbers set cursorline " highlight line number+cursor line if has("bsd") set cursorlineopt=number endif "set cursorcolumn " highlight current cursor column execute "set colorcolumn=" . join(range(73,80), ',') set modeline " read vim mode line in files set modelines=5 " top/bottom line no. to search set lazyredraw " no scr. update during macros set spelllang=de,en " spell check languages syntax enable " enable syntax plugin (builtin) if &diff syntax off set colorcolumn= endif set diffopt=internal set diffopt+=filler,context:20 set diffopt+=iwhite,iblank set diffopt+=algorithm:histogram set diffexpr= filetype plugin indent on " load plugins based on filetype set re=1 " use old regexp engine (faster) let mapleader = "," " INDENTATION set autoindent " indent new lines on same level set smartindent " smart indent for programming set cindent " smart indent for C programming "set formatprg=fmt\ -mnst\ 4\ -w\ 72 " gq wrap rule set formatprg=par\ -w72qie " gq wrap rule " 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 " capital letter => case sensitive " SPACES (TABS) set tabstop=8 " tabs are displayed as X spaces set shiftwidth=4 " number of spaces used to indent let &softtabstop=&shiftwidth " tab key enters X spaces set expandtab " use spaces when hitting tab set smarttab " backspace will delete shiftwidth set textwidth=0 " automatically break lines here set list " display control characers set listchars=tab:>- " which characters to display set fillchars=vert:\│ set fillchars+=foldsep:\│,fold:\— set fillchars+=foldclose:\🗁 set fillchars+=foldopen:\🗁 set wildmode=full ""map :q map q :bpspbnbd nmap Q :qall! nmap k :HugoHelperLink let g:currentmode={ \ 'n' : 'NORMAL', \ 'v' : 'VISUAL', \ 's' : 'SELECT', \ 'V' : 'V·Line', \ '' : 'V·Block', \ 'i' : 'INSERT', \ 'R' : 'R', \ 'Rv' : 'V·Replace', \ 'c' : 'Command', \} " STATUSLINE, AIRLINE/POWERLINE IS FOR NOOBS set statusline=\ %{toupper(g:currentmode[mode()])} set statusline+=\ %f set statusline+=%m%r%h%w%q set statusline+=%= set statusline+=\ BUF:%n set statusline+=\ %{&fileencoding?&fileencoding:&encoding} set statusline+=\ %{&fileformat} set statusline+=\ HEX:%B\ INT:%b set statusline+=\ ROW:%l\ COL:%c set statusline+=\ %p%% set statusline+=\ " C specific highlighting let c_space_errors=1 " trailing space and before tab let c_gnu=1 " GNU gcc specific items let c_comment_strings=1 " strings and numbers in comment let c_curly_error=1 " highlight missing } (may be slow) " TEMPORARY FILES set undofile " save undo history to disk set undodir=~/.vim/undo// " save undo history here set backup " create backups set backupcopy=yes " copy file and edit original set backupdir=~/.vim/backup// " save backup files here set backupskip=mutt-* " do not create backups of emails set nowritebackup " no extra backup before writing set writeany " write to any file (:w!) set directory=~/.vim/swapfiles// " move swapfiles out of the way set runtimepath^=/home/sdk/.vim/pack/plugins/start/vim-clap let g:clap_plugin_experimental = v:true " CREATE DIRECTORIES silent execute '!mkdir -p ~/.vim/undo ~/.vim/backup ~/.vim/swapfiles' " LOOK N FEEL set t_Co=256 " for terminal with 256 colors set background=dark " I prefer dark backgrounds colorscheme wombat256 " :colorscheme for more let g:is_posix = 1 " $( ) is fine " THEME TWEAKS highlight CursorLine ctermbg=238 highlight ColorColumn ctermbg=none ctermfg=9 highlight CursorLineNr ctermbg=none ctermfg=208 cterm=none highlight LineNr ctermbg=0 highlight SpecialKey ctermbg=232 ctermfg=245 highlight Normal ctermbg=232 highlight NonText ctermbg=232 ctermfg=234 highlight ErrorMsg ctermbg=0 ctermfg=160 cterm=none highlight Visual ctermbg=232 ctermfg=208 highlight Search ctermbg=220 ctermfg=0 highlight VertSplit ctermfg=208 ctermbg=0 highlight Folded ctermfg=45 ctermbg=0 highlight FoldColumn ctermfg=45 ctermbg=0 highlight StatusLine ctermbg=234 ctermfg=245 highlight StatusLineNC ctermbg=0 ctermfg=245 " HIGHLIGHT SPECIAL WORDS match ErrorMsg '\(TODO:\|FIXME\|XXX\|workaround\|WTF\|\s\+$\| \+\ze\t\)' " SPELLING FIX (for cursorline) highlight SpellBad cterm=NONE ctermfg=darkred ctermbg=NONE " VIMDIFF COLOR FIX highlight DiffAdd ctermfg=76 ctermbg=234 highlight DiffDelete ctermfg=234 ctermbg=0 highlight DiffChange ctermfg=255 ctermbg=234 highlight DiffText ctermfg=166 ctermbg=234 " GITGUTTER set signcolumn=number highlight GitGutterAddLine ctermfg=1 ctermbg=0 highlight GitGutterChangeLine ctermfg=3 ctermbg=0 highlight GitGutterDeleteLine ctermfg=2 ctermbg=0 highlight GitGutterChangeDeleteLine ctermfg=2 ctermbg=0 highlight SignColumn ctermbg=0 nnoremap od :GitGutterDiffOrig " CURSOR SHAPE let &t_SI = "\e[6 q" " insert mode: ibeam cursor let &t_EI = "\e[2 q" " normal mode: block cursor " Buffer NAVIGATION map  :bnext nmap  :bnext map  :bprevious nmap  :bprevious " TMUX FIXES map  imap  nmap  map  imap  nmap  map  imap  nmap  map  imap  nmap  " 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() ? '' : '' " 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 = 0 " tree view let g:netrw_ctags = "ectags" " ctags executable to use let g:netrw_keepdir = 0 let g:netrw_winsize = 25 hi! link netrwMarkFile Search " TAGS FILE set tags=.git/tags; " Search tagfile backward recursive nnoremap gt " Jump to tag (go tag) nnoremap gb " Jump to last position (go back) nnoremap gh :FSHere " Jump to header file (go header) nnoremap bb :ls:b nnoremap  :Lex " CSCOPE if has("cscope") set csprg=cscope set cst set cspc=3 if filereadable("cscope.out") cs add cscope.out elseif filereadable(".git/cscope.out") cs add .git/cscope.out elseif filereadable($CSCOPEDB) cs add $CSCOPEDB elseif filereadable("../.git/cscope.out") cs add ../.git/cscope.out elseif filereadable("../../.git/cscope.out") cs add ../../.git/cscope.out elseif filereadable("../../../.git/cscope.out") cs add ../../../.git/cscope.out elseif filereadable("../../../../.git/cscope.out") cs add ../../../../.git/cscope.out endif " 'ts' symbol: find all references to the token under cursor " 'tg' global: find global definition(s) of the token under cursor " 'tc' calls: find all calls to the function name under cursor " 'tt' text: find all instances of the text under cursor " 'te' egrep: egrep search for the word under cursor " 'tf' file: open the filename under cursor " 'ti' includes: find files that include the filename under cursor " 'td' called: find functions that function under cursor calls nmap ts :scs find s =expand("") nmap tg :scs find g =expand("") nmap tc :scs find c =expand("") nmap tt :scs find t =expand("") nmap te :scs find e =expand("") nmap tf :scs find f =expand("") nmap ti :scs find i ^=expand("")$ nmap td :scs find d =expand("") function! UpdateCSCOPE() :! cscope -RL -f .git/cscope.out :! ectags -Rf .git/tags endfunction endif " nmap  :cnext " nmap  :cprevious nmap  :execute "grep " . expand("") nmap mm :make nmap mt :make test nmap md :make debug nmap em :!vim Makefile nmap st :!smake . test nmap sm :!smake . let s:enablepaste = 0 function! TogglePasteMode() if s:enablepaste set nopaste list number else set paste nolist nonumber endif let s:enablepaste = s:enablepaste ? 0 : 1 endfunction nmap :call TogglePasteMode() if executable('ugrep') set grepprg=ugrep\ -RInk\ -j\ -u\ --tabs=1\ --ignore-files set grepformat=%f:%l:%c:%m,%f+%l+%c+%m,%-G%f\\\|%l\\\|%c\\\|%m endif " CUSTOM: # highlights, n searches. nmap # :let @/ = expand('')\|set hlsearch " CUSTOM: root save function RootSave() :exec 'w !doas dd of=' . shellescape(expand('%')) :set nomodified endfunction " PLUGIN: TAGBAR nmap :TagbarToggle let g:tagbar_ctags_bin = "ectags" " PLUGIN: TERMDEBUGGER let g:termdebugger = "egdb" " PLUGIN: EASY ALIGN xmap ga (EasyAlign) nmap ga (EasyAlign) " CUSTOM: AUTO BRACKET inoremap { { } " CUSTOM: TREAT C FILES AS C, NOT C++ augroup project autocmd! autocmd BufRead,BufNewFile *.h,*.c set filetype=c.doxygen augroup END " CUSTOM: AUTORELOAD ON VIMRC CHANGE augroup myvimrc au! au BufWritePost vimrc so $MYVIMRC augroup END augroup myquickfix autocmd! autocmd QuickFixCmdPost [^l]* cwindow autocmd QuickFixCmdPost l* lwindow augroup END augroup cursorpos autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END augroup diffsyntax autocmd! OptionSet diff syntax off augroup END autocmd FocusLost silent write