" set vim mode set nocompatible source ~/.vim/plugins.vim filetype plugin indent on if has("vms") set nobackup else " set backup if has('persistent_undo') set undofile endif endif syntax enable " set transparent background " let g:solarized_termtrans=1 " use italics let g:solarized_term_italics=1 " filetype-specific syntax highlighting groups let g:solarized_extra_hi_groups=1 let g:solarized_termtrans=1 " let g:solarized_contrast="high" " let g:solarized_visibility="high" set background=dark colorscheme solarized8 " underline spelling highlight clear SpellBad highlight SpellBad cterm=undercurl " true color set termguicolors " make true colors work in tmux let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" " make comments and HTML attributes italic "highlight Comment cterm=italic "highlight htmlArg cterm=italic " highlight Normal ctermbg=NONE guibg=NONE "highlight NonText ctermbg=NONE guibg=NONE " files and backups set directory=$HOME/.vim/swapfiles// " set backupdir=$HOME/.vim/backupdir// set undodir=$HOME/.vim/undofiles// " yank into system clipboard set clipboard=unnamedplus " Only do this part when compiled with support for autocommands. if has("autocmd") " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! autocmd FileType text setlocal foldtext< augroup END " remember cursor position autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif endif " has("autocmd") if !has('nvim') " Get the defaults that most users want. source $VIMRUNTIME/defaults.vim " The matchit plugin makes the % command work better packadd matchit endif " always set autoindenting on set autoindent " smart indent; stop indent when closing brackets etc set smartindent " two spaces after .?! when joining lines set joinspaces " searching " highlight search result set hlsearch " ignore case set ignorecase " case-sensitive if expression contains capital letters set smartcase " incremental search set incsearch set nolazyredraw " delete whitespace, line break and char using <BS> set backspace=indent,eol,start " always show curser position set ruler " keep 1000 lines of history set history=1000 set textwidth=120 set colorcolumn=+1 " display absolute number of current line set number " display relative line numbers set relativenumber " highlight current line set cursorline " encoding set fileencoding=utf-8 " break at last word instead of last char set linebreak " autoload file changes set autoread " tab control " insert spaces set expandtab set smarttab set tabstop=4 set softtabstop=4 set shiftwidth=4 set shiftround "set completeopt+=longest " invisible characters set list set listchars=tab:→\ ,eol:¬,trail:⋅,extends:❯,precedes:❮ set showbreak=↪ " code folding settings " fold based on syntax set foldmethod=indent " don't fold by default set nofoldenable set foldlevel=1 " smoother redrawing set ttyfast " diff with vertical split set diffopt+=vertical " show the status line all the time set laststatus=2 " keep 5 lines on the screen when scrolling set scrolloff=5 " enhanced command line completion set wildmenu " Search down into subfolders " Provides tab-completion for all file-related tasks set path+=** " allow switching away from unsaved buffers set hidden " show incomplete commands set showcmd "set noshowmode " don't show which mode disabled for PowerLine " complete files like a shell set wildmode=list:longest set shell=$SHELL " command bar height set cmdheight=1 " set terminal title set title set shortmess+=TOFwat " show matching braces set showmatch " how many tenths of a second to blink set mat=2 " set spell langs set spelllang=de,en "" user commands "" create tags file "" ^] jump to tag under cursor "" g^] for ambiguous tags "" ^t jump back in the tag stack "command! MakeTags !ctags -R . " error bells set errorbells set visualbell set timeoutlen=500 " turn on manpages (:Man) runtime ftplugin/man.vim " set a map leader for more key combos let mapleader=',' " clear highlighted search noremap <space> :nohlsearch<cr> " enable . command in visual mode vnoremap . :normal .<cr> " move between windows using CTRL+hjll map <silent> <C-h> :call functions#WinMove('h')<cr> map <silent> <C-j> :call functions#WinMove('j')<cr> map <silent> <C-k> :call functions#WinMove('k')<cr> map <silent> <C-l> :call functions#WinMove('l')<cr> " count wraped lines as one line when doing relative jumps noremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j') noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k') " scroll the viewport faster nnoremap <C-e> 3<C-e> nnoremap <C-y> 3<C-y> " "" moving up and down work as you would expect "nnoremap j gj "nnoremap k gk "nnoremap ^ g^ "nnoremap $ g$ "" cool resizing "nnoremap <Left> :vertical resize +2<CR> "nnoremap <Right> :vertical resize -2<CR> "nnoremap <Up> :resize -2<CR> "nnoremap <Down> :resize +2<CR><Paste> " search for word under the cursor nnoremap <leader>/ "fyiw :/<c-r>f<cr> " highlight conflicts match ErrorMsg '^\(<\|=\|>\)\{7\}\([^=].\+\)\?$' " make the highlighting of tabs and other non-text less annoying highlight SpecialKey ctermbg=none ctermfg=8 highlight NonText ctermbg=none ctermfg=8 "" Section AutoGroups {{{ "" file type specific settings augroup configgroup autocmd! " automatically resize panes on resize autocmd VimResized * exe 'normal! \<c-w>=' autocmd BufWritePost .vimrc,.vimrc.local,init.vim source % autocmd BufWritePost .vimrc.local source % " save all files on focus lost, ignoring warnings about untitled buffers autocmd FocusLost * silent! wa " make quickfix windows take all the lower section of the screen " when there are multiple windows open autocmd FileType qf wincmd J " autocmd BufNewFile,BufReadPost *.md set filetype=markdown " let g:markdown_fenced_languages = ['css', 'javascript', 'js=javascript', 'json=javascript', 'stylus', 'html'] " " autocmd! BufEnter * call functions#ApplyLocalSettings(expand('<afile>:p:h')) " autocmd BufNewFile,BufRead,BufWrite *.md syntax match Comment /\%^---\_.\{-}---$/ autocmd! BufWritePost * Neomake augroup END " }}} " paste without indention function! WrapForTmux(s) if !exists('$TMUX') return a:s endif let tmux_start = "\<Esc>Ptmux;" let tmux_end = "\<Esc>\\" return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end endfunction "let &t_SI .= WrapForTmux("\<Esc>[?2004h") "let &t_EI .= WrapForTmux("\<Esc>[?2004l") function! XTermPasteBegin() set pastetoggle=<Esc>[201~ set paste return "" endfunction inoremap <special> <expr> <Esc>[200~ XTermPasteBegin() " ctrlp " order top to bottom let g:ctrlp_match_window='bottom,order::ttb' " open files in new buffer let g:ctrlp_switch_buffer=0 " use ripgrep if available if executable('rg') set grepprg=rg\ --color=never let g:ctrlp_user_command='rg %s --files -i --color=never --glob ""' let g:ctrlp_use_caching=0 endif " use ag if available if executable('ag') set grepprg=ag\ --nogroup\ --nocolor let g:ctrlp_user_command='ag %s -l --nocolor -g ""' let g:ctrlp_use_caching=0 endif " Append modeline after last line in buffer. " Use substitute() instead of printf() to handle '%%s' modeline in LaTeX files. function! AppendModeline() let l:modeline = printf(" vim: set filetype=%s ts=%d sw=%d tw=%d %set :", \ &filetype, &tabstop, &shiftwidth, &textwidth, &expandtab ? '' : 'no') let l:modeline = substitute(&commentstring, "%s", l:modeline, "") call append(line("$"), l:modeline) endfunction nnoremap <silent> <Leader>ml :call AppendModeline()<CR> " set textwidth for mails autocmd FileType mail setlocal textwidth=72 " netrw settings " disable banner let g:netrw_banner=0 " open in prior window let g:netrw_browse_split=4 " open splits to the right let g:netrw_altv=1 " treeview let g:netrw_liststyle=3 let g:netrw_list_hide=netrw_gitignore#Hide() let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' "" racer config (rust autocomplete) "let g:racer_cmd = "/home/me/.cargo/bin/racer" "let g:racer_experimental_completer = 1 "au FileType rust nmap gd <Plug>(rust-def) "au FileType rust nmap gs <Plug>(rust-def-split) "au FileType rust nmap gx <Plug>(rust-def-vertical) "au FileType rust nmap <leader>gd <Plug>(rust-doc) "" " javacomplete2 "" autocmd FileType java setlocal omnifunc=javacomplete#Complete "" " enable smart (trying to guess import option) inserting class imports with F4 "" nmap <F4> <Plug>(JavaComplete-Imports-AddSmart) "" imap <F4> <Plug>(JavaComplete-Imports-AddSmart) "" " enable smart (trying to guess import option) inserting class imports with F4 "" nmap <F5> <Plug>(JavaComplete-Imports-Add) "" imap <F5> <Plug>(JavaComplete-Imports-Add) "" " add all missing imports with F6 "" nmap <F6> <Plug>(JavaComplete-Imports-AddMissing) "" imap <F6> <Plug>(JavaComplete-Imports-AddMissing) "" " add all missing imports with F6 "" nmap <F7> <Plug>(JavaComplete-Imports-RemoveUnused) "" imap <F7> <Plug>(JavaComplete-Imports-RemoveUnused)