" vundle " set vIM mode set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim source ~/.vim/plugins.vim filetype plugin indent on " Get the defaults that most users want. source $VIMRUNTIME/defaults.vim if has("vms") set nobackup else " set backup if has('persistent_undo') set undofile endif endif " encrypt files using blowfish set cryptmethod=blowfish2 syntax on colorscheme onedark " files and backups " set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp " set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp set directory=$HOME/.vim/swapfiles// " set backupdir=$HOME/.vim/backupdir// set undodir=$HOME/.vim/undofiles// " search tags file downwards from the direcotry of the edited file set tags=./tags; set clipboard=unnamedplus " yank into system clipboard " 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! " For all text files set 'textwidth' to 78 characters. autocmd FileType text setlocal textwidth=78 augroup END " remember curser position autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif endif " has("autocmd") " Add optional packages. " " The matchit plugin makes the % command work better, but it is not backwards " compatible. if has('syntax') && has('eval') packadd matchit endif set autoindent " always set autoindenting on set smartindent " smart indent; stop indent when closing brackets etc " searching set hlsearch " highlight search result set ignorecase " ignore case set smartcase " case-sensitive if expression contains capital letters set incsearch " incremental search set nolazyredraw " delete whitespace, line break and char using set backspace=indent,eol,start set ruler " always show curser position set history=1000 " keep 1000 lines of history " set textwidth=120 set number " display absolute number of current line set relativenumber " display relative line numbers set cursorline " highlight current line " encoding set fileencoding=utf-8 " break at last word instead of last char set linebreak " tab control set noexpandtab " insert tabs 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 set foldmethod=syntax " fold based on indent set foldnestmax=10 " deepest fold is 10 levels set nofoldenable " don't fold by default set foldlevel=1 set ttyfast " faster redrawing set diffopt+=vertical set laststatus=2 " show the status line all the time set so=7 " set 7 lines to the cursors - when moving vertical set wildmenu " enhanced command line completion " Search down into subfolders " Provides tab-completion for all file-related tasks set path+=** set hidden " current buffer can be put into background set showcmd " show incomplete commands set noshowmode " don't show which mode disabled for PowerLine set wildmode=list:longest " complete files like a shell set scrolloff=3 " lines of text around cursor set shell=$SHELL set cmdheight=1 " command bar height set title " set terminal title set magic " set magic on, for regex set showmatch " show matching braces set mat=2 " how many tenths of a second to blink set complete +=kspell " autocomplete from the dictionary when spellchecking is enabled set spelllang=de,en " set spell langs " 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 noerrorbells set visualbell set t_vb= set tm=500 " turn on manpages (:Man) runtime ftplugin/man.vim " make comments and HTML attributes italic highlight Comment cterm=italic highlight htmlArg cterm=italic " set a map leader for more key combos let mapleader = ',' " clear highlighted search " nnoremap :set hlsearch! hlsearch? noremap :nohlsearch " enable . command in visual mode vnoremap . :normal . 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 " helpers for dealing with other people's code nmap \t :set ts=4 sts=4 sw=4 noet nmap \s :set ts=4 sts=4 sw=4 et " 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 " }}} " detect filetypes, use filetype plugins and autoindent filetype plugin indent on " 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 set runtimepath^=~/.vim/bundle/ctrlp.vim " make true colors in tmux work " set t_8f=[38;2;%lu;%lu;%lum " set t_8b=[48;2;%lu;%lu;%lum " true color set termguicolors let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" highlight Normal ctermbg=NONE guibg=NONE highlight NonText ctermbg=NONE guibg=NONE " airline options if !exists('g:airline_symbols') let g:airline_symbols = {} endif let g:airline_powerline_fonts=1 let g:airline_left_sep = '' let g:airline_left_alt_sep = '' let g:airline_right_sep = '' let g:airline_right_alt_sep = '' let g:airline_theme='onedark' let g:airline_symbols.branch = '' let g:airline_symbols.readonly = '' let g:airline_symbols.linenr = '' let g:airline#extensions#tabline#enabled = 1 " enable airline tabline let g:airline#extensions#tabline#tab_min_count = 2 " only show tabline if tabs are being used (more than 1 tab open) let g:airline#extensions#tabline#show_buffers = 0 " do not show open buffers in tabline let g:airline#extensions#tabline#show_splits = 0 " Toggle NERDTree nmap k :NERDTreeToggle " expand to the path of the file in the current buffer nmap y :NERDTreeFind " autocmd BufWinEnter * NERDTreeMirror let NERDTreeShowHidden=1 let NERDTreeDirArrowExpandable = '▷' let NERDTreeDirArrowCollapsible = '▼' " 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() " delimate config let delimitMate_expand_cr = 1 " set textwidth for mails " au BufRead /tmp/mutt-* set tw=72 autocmd FileType mail setlocal textwidth=72 " netrw settings " (vim builtin filebrowser which ist also just a plugin bundled with vim) let g:netrw_banner = 0 " disable 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 " treeview 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) " close Goyo *and* vim with :q function! s:goyo_enter() let b:quitting = 0 let b:quitting_bang = 0 autocmd QuitPre let b:quitting = 1 cabbrev q! let b:quitting_bang = 1 q! endfunction function! s:goyo_leave() " Quit Vim if this is the only remaining buffer if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1 if b:quitting_bang qa! else qa endif endif endfunction autocmd! User GoyoEnter call goyo_enter() autocmd! User GoyoLeave call goyo_leave() " vimux mappings " Prompt for a command map vp :VimuxPromptCommand " Prompt for a make command map vm :VimuxPromptCommand("make ") " Inspect runner pane map vi :VimuxInspectRunner " Close runner map vq :VimuxCloseRunner " Rerun last command map vl :VimuxRunLastCommand " Stop running command map vs :VimuxInterruptRunner " vim: set filetype=vim ts=8 sw=2 tw=120 noet :