" Vundle filetype off " Set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim " Download plug-ins to the ~/.vim/plugged/ directory call vundle#begin('~/.vim/plugged') " Let Vundle manage Vundle; muss immer der erste Eintrag sein Plugin 'VundleVim/Vundle.vim' " project drawer Plugin 'preservim/nerdtree' " ansible integration Plugin 'pearofducks/ansible-vim' " omnicompletion während dem tippen Plugin 'vim-scripts/AutoComplPop' " statusline Plugin 'itchyny/lightline.vim' " languagepack Plugin 'sheerun/vim-polyglot' " highlight fuer movement mit tTfFwW Plugin 'unblevable/quick-scope' " fuzzy finder Plugin 'ctrlpvim/ctrlp.vim' " git integration G: Plugin 'tpope/vim-fugitive' " ausrichten von text Plugin 'junegunn/vim-easy-align' " buffer in tabline Plugin 'ap/vim-buftabline' " start screen Plugin 'mhinz/vim-startify' " bracketed paste/ kein set-paste mehr Plugin 'ConradIrwin/vim-bracketed-paste' " Undotree Plugin 'mbbill/undotree' " highlight yanked text Plugin 'machakann/vim-highlightedyank' call vundle#end() let mapleader = "," " ### allgemeine Optionen " indentation " https://vim.fandom.com/wiki/Indenting_source_code set expandtab set shiftwidth=2 set softtabstop=2 " ### Suche " While typing a search command, show immediately where the so far typed pattern matches. set incsearch " When there is a previous search pattern, highlight all its matches. set hlsearch " Ignore case in search patterns. set ignorecase " Override the 'ignorecase' option if the search pattern contains upper case characters. set smartcase " show status-bar set laststatus=2 " Show line numbers. set number " ### Kommandovervollständigung " https://www.reddit.com/r/vim/comments/oo9gms/any_way_to_get_vim_to_not_defaulting_to_the_first/h5wygix/?context=8&depth=9 set wildmode=longest,list,full set wildmenu set wildignore=*.o,*~ " ### Rest " Show (partial) command in status line. set showcmd set virtualedit=onemore set encoding=UTF-8 set visualbell set ruler set undolevels=1000 set backspace=indent,eol,start " ermögliche das bearbeitete buffer in der hintergrund können set hidden " verhindert zeilenumbrüche set nowrap " https://vim.fandom.com/wiki/Automatic_word_wrapping set wrap linebreak " Enable syntax highlighting syntax on " aktiviere maus set mouse=a " vergrößere/verkleinere splits mit der maus " https://vi.stackexchange.com/questions/514/how-do-i-change-the-current-splits-width-and-height :set ttymouse=xterm2 " https://unix.stackexchange.com/questions/12535/how-to-copy-text-from-vim-to-an-external-program set clipboard=unnamedplus " zeige "matching" klammer usw. set showmatch " ### Plugins " ### ripgrep und ctrlp if executable('rg') let g:ctrlp_user_command = 'rg %s --files --hidden --color=never --glob ""' else let g:ctrlp_user_command = 'find %s -type f' endif " ignore files " https://github.com/ctrlpvim/ctrlp.vim set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe " Windows let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' let g:ctrlp_map = '' " ### lightline/statusline " blende insert/visual/... in der commandline aus, steht in lightline set noshowmode set laststatus=2 let g:lightline = { \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ] \ }, \ 'component_function': { \ 'gitbranch': 'FugitiveHead' \ }, \ } " ### vim startify " returns all modified files of the current git repo " `2>/dev/null` makes the command fail quietly, so that when we are not " in a git repo, the list will be empty function! s:gitmodified() let files = systemlist('git ls-files -m 2>/dev/null') return map(files, "{'line': v:val, 'path': v:val}") endfunction " same as above, but show untracked files, honouring .gitignore function! s:gituntracked() let files = systemlist('git ls-files -o --exclude-standard 2>/dev/null') return map(files, "{'line': v:val, 'path': v:val}") endfunction let g:startify_lists = [ \ { 'type': 'files', 'header': [' mru'] }, \ { 'type': 'dir', 'header': [' mru '. getcwd()] }, \ { 'type': 'sessions', 'header': [' sessions'] }, \ { 'type': 'bookmarks', 'header': [' bookmarks'] }, \ { 'type': function('s:gitmodified'), 'header': [' git modified']}, \ { 'type': function('s:gituntracked'), 'header': [' git untracked']}, \ { 'type': 'commands', 'header': [' commands'] }, \ ] " ### quick-scope " trigger a highlight in the appropriate direction only when pressing these keys: let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] " wrap words with `` " https://stackoverflow.com/questions/24555192/command-for-putting-backticks-around-the-current-word nnoremap ciw``"`` xnoremap c``"`` " ### Keybindings " deaktiviere Ex-Mode keybinding nnoremap Q " Ctrl+S zum speichern nnoremap :w " Navigate tabs nnoremap :bnext nnoremap :bprev " strg+f sucht fuzzy nach dateien nnoremap :CtrlP " format paragraphs as markdown table nnoremap mm Vap:EasyAlign *\| nnoremap Vap:EasyAlign *\| " lasse Y wie C oder D funktionieren nmap Y y$ " Toggle NERDTree nnoremap :call ToggleNERDTreeFind() " " toddle Undotree nnoremap :UndotreeToggle " U als un-undo und nicht als Großschreibung nnoremap U :redo " ### Abbreviations iabbrev ncicht nicht iabbrev nciht nicht " linenumbers nnoremap z :set nonumber! " einzelne Aufräumfunktionen, bei F9 werden alle gecalled " trailing whitespaces werden automatisch beim speichern entfernt function! Whitespaces_trailing() " Remove trailing whitespace %s/\s\+$//e endfunction function! Whitespaces_consecutive() " Replace consecutive spaces between words with a single space (only for .md files) if &filetype == "markdown" %s/\(\w\)\s\+\(\w\)/\1 \2/g endif endfunction function! Whitespaces_lines() " Run silent command to remove multiple consecutive empty lines (only for .md files) if &filetype == "markdown" silent %!cat -s endif endfunction function! Whitespaces_all() call Whitespaces_trailing() call Whitespaces_consecutive() call Whitespaces_lines() endfunction " Map F9 to execute the custom function nnoremap :call Whitespaces_all() " entferne trailing whitespaces beim speichern autocmd BufWritePre * :call Whitespaces_trailing() " Exit Vim if NERDTree is the only window remaining in the only tab. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " NERDTree - show hidden files let NERDTreeShowHidden=1 " NERDTREE - Find file or close " https://stackoverflow.com/questions/14964020/is-it-possible-to-configure-behaviour-of-nerdtreetoggle-to-use-nerdtreefind-When function! ToggleNERDTreeFind() if g:NERDTree.IsOpen() execute ':NERDTreeClose' else execute ':NERDTreeFind' endif endfunction " yaml einrückung autocmd FileType yaml setlocal ai ts=2 sw=2 et autocmd FileType yml setlocal ai ts=2 sw=2 et