dotfiles/.vim/vimrc

186 lines
5.0 KiB
VimL

" ###########################################
" # CORE BEHAVIOR
" ###########################################
set nocompatible
set mouse=
set backspace=indent,eol,start
" ###########################################
" # TEMPORARY FILES
" ###########################################
set undofile
set undodir=~/.local/vim/undo//
set backup
set backupcopy=yes
set backupdir=~/.local/vim/backup//
set directory=~/.local/vim/swapfiles//
silent execute '!mkdir -p ~/.local/vim/backup ~/.local/vim/undo ~/.local/vim/swapfiles'
" ###########################################
" # VISUAL CHANGES
" ###########################################
set shm+=I
set noshowcmd
set noshowmode
syntax on
filetype plugin on
set t_Co=256
set background=dark
colorscheme candle-grey-transparent
hi CursorLineNr ctermbg=NONE ctermfg=30 cterm=NONE
hi CursorLine ctermbg=NONE ctermfg=NONE cterm=NONE
hi SpellBad ctermbg=NONE ctermfg=124
match ErrorMsg '\(TODO:\|FIXME\|XXX\|workaround\|WTF\|: error:.*\|\s\+$\| \+\ze\t\)'
" ###########################################
" # VIMDIFF
" ###########################################
set formatoptions=crolj
hi DiffAdd ctermbg=22 ctermfg=NONE cterm=NONE
hi DiffDelete ctermbg=234 ctermfg=NONE cterm=NONE
hi DiffChange ctermbg=236 ctermfg=NONE cterm=NONE
hi DiffText ctermbg=red ctermfg=NONE cterm=NONE
hi VertSplit ctermbg=NONE ctermfg=246 cterm=NONE
hi FoldColumn ctermbg=NONE ctermfg=251 cterm=NONE
hi Folded ctermbg=233 ctermfg=251 cterm=NONE
" ###########################################
" # TOGGLES / SETTINGS
" ###########################################
let g:is_posix=1
let g:mapleader = ","
set scrolloff=3
set spelllang=de,en
set hlsearch
set ignorecase
set smartcase
set tabstop=8
set shiftwidth=4
let &softtabstop=&shiftwidth
set expandtab
set smarttab
set textwidth=72
set formatprg=par\ -w72q
set list
set number
set listchars=tab:›,trail:
set fillchars=vert:\|,eob:\
" ###########################################
" # STATUS BAR
" ###########################################
function BufInfo()
endfunction
set laststatus=2
set statusline=%#Comment#
set statusline+=[%{toupper(mode())}]
set statusline+=\ <%n/%{g:bufno}>
set statusline+=%=
set statusline+=\ %f:%l:%c
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}\ %{&fileformat}
set statusline+=\ 0x%B
set statusline+=\ %p%%
" ###########################################
" # OMNI COMPLETE
" ###########################################
set omnifunc=syntaxcomplete#Complete
set wildmenu
set wildmode=longest:full,full
function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
return "\<Tab>"
else
return "\<C-N>"
endif
endfunction
inoremap <tab> <C-R>=CleverTab()<CR>
" ###########################################
" # TERMINAL DEBUGGER
" ###########################################
packadd termdebug
let g:termdebugger = "egdb"
" ###########################################
" # VIM FZF
" ###########################################
let g:fzf_layout = { 'down': '60%' }
let g:fzf_action = { 'ctrl-t': 'tab split', 'ctrl-x': 'vsplit' }
noreabbrev <expr> ts getcmdtype() == ":" && getcmdline() == 'ts' ? 'FZFTselect' : 'ts'
nmap gt <Plug>(fzf_tags)
nnoremap <leader>g :RG <C-R>=expand("<cword>")<CR><CR>
nnoremap <leader>f :Files<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>t :Tags<CR>
nnoremap <leader>h :History<CR>
" ###########################################
" # TAGBAR
" ###########################################
let g:tagbar_ctags_bin = "ectags"
noremap <F12> :TagbarToggle<CR>
" ###########################################
" # TAGS FILE
" ###########################################
set tags=./tags;/
nnoremap gb <c-o>
nnoremap gs :call Cscope('0', expand('<cword>'), 0)<CR>
nnoremap gc :call Cscope('3', expand('<cword>'), 0)<CR>
nnoremap ge :call Cscope('6', expand('<cword>'), 0)<CR>
" ###########################################
" # CSCOPE
" ###########################################
function! LoadCscope()
let db = findfile("cscope.out", ".;")
if (!empty(db))
let path = strpart(db, 0, match(db, "/cscope.out$"))
set nocscopeverbose " suppress 'duplicate connection' error
exe "cs add " . db . " " . path
set cscopeverbose
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
endfunction
" ###########################################
" # EASY ALIGN
" ###########################################
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)
" ###########################################
" # AUTORUN
" ###########################################
augroup mystuff
au!
au VimResized * wincmd =
au BufEnter * let g:bufno=len(getbufinfo({'buflisted':1}))
au BufEnter * call LoadCscope()
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
au BufRead,BufNewFile *.h,*.c set filetype=c.doxygen
au BufRead,BufNewFile Makefile,/usr/src/*.c,/usr/src/*.h,*.gmk setl sw=8 sts=8 noet
au BufWritePost vimrc so ~/.vim/vimrc
augroup end