" 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_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 = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[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 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 :nohlsearch " enable . command in visual mode vnoremap . :normal . " move between windows using CTRL+hjll map :call functions#WinMove('h') map :call functions#WinMove('j') map :call functions#WinMove('k') map :call functions#WinMove('l') " count wraped lines as one line when doing relative jumps noremap j (v:count == 0 ? 'gj' : 'j') noremap k (v:count == 0 ? 'gk' : 'k') " scroll the viewport faster nnoremap 3 nnoremap 3 " "" moving up and down work as you would expect "nnoremap j gj "nnoremap k gk "nnoremap ^ g^ "nnoremap $ g$ "" cool resizing "nnoremap :vertical resize +2 "nnoremap :vertical resize -2 "nnoremap :resize -2 "nnoremap :resize +2 " search for word under the cursor nnoremap / "fyiw :/f " 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! \=' 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(':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 = "\Ptmux;" let tmux_end = "\\\" return tmux_start . substitute(a:s, "\", "\\", 'g') . tmux_end endfunction "let &t_SI .= WrapForTmux("\[?2004h") "let &t_EI .= WrapForTmux("\[?2004l") function! XTermPasteBegin() set pastetoggle=[201~ set paste return "" endfunction inoremap [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 --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 ml :call AppendModeline() " 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 (rust-def) "au FileType rust nmap gs (rust-def-split) "au FileType rust nmap gx (rust-def-vertical) "au FileType rust nmap gd (rust-doc) "" " javacomplete2 "" autocmd FileType java setlocal omnifunc=javacomplete#Complete "" " enable smart (trying to guess import option) inserting class imports with F4 "" nmap (JavaComplete-Imports-AddSmart) "" imap (JavaComplete-Imports-AddSmart) "" " enable smart (trying to guess import option) inserting class imports with F4 "" nmap (JavaComplete-Imports-Add) "" imap (JavaComplete-Imports-Add) "" " add all missing imports with F6 "" nmap (JavaComplete-Imports-AddMissing) "" imap (JavaComplete-Imports-AddMissing) "" " add all missing imports with F6 "" nmap (JavaComplete-Imports-RemoveUnused) "" imap (JavaComplete-Imports-RemoveUnused)