" Plugins ###################################################################### " Auto completion packadd! coc.nvim source $XDG_CONFIG_HOME/vim/coc.nvim.vim " Theme packadd! onedark.vim " Git information packadd! vim-gitgutter " Settings ##################################################################### " hybrid linenumbers set number relativenumber " no timeout when exiting insert-mode " (see https://www.johnhawthorn.com/2012/09/vi-escape-delays/) set timeoutlen=1000 ttimeoutlen=0 " smart case insensitive search (insens: /copy /Copy\c; sens: /Copy /copy\C) set ignorecase smartcase " Tab size set tabstop=4 " Shift the same amount as tabstop set shiftwidth=0 " Highlight current line set cursorline " Automatically add leading comment (when pressing o/O or enter in Insert) set formatoptions+=cro " see :help persistent-undo set undofile " Update every 300ms for better experience with plugins like gitgutter and coc set updatetime=300 " Check for spelling in comments and strings set spell spelllang=en_us " Show the effect of a command while typing (substitute) if (has('nvim')) set inccommand=nosplit endif " Put new window below/right of current set splitbelow splitright " What is ce there for? cw should include whitespace like dw. if (has('nvim')) set cpoptions-=_ else nmap cw dwi nmap cW dWi endif " Copy structure of the existing lines indent when autoindenting a new line set copyindent " Show ruler at 80 and 100 columns set colorcolumn=80,100 " Keybindings ################################################################## " Set leader key let mapleader = "\" " Stop highlighting search result when pressing Return nnoremap :nohlsearch " Indentation jump " https://vim.fandom.com/wiki/Move_to_next/previous_line_with_same_indentation noremap :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%<' . line('.') . 'l\S', 'be') noremap :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%>' . line('.') . 'l\S', 'e') " Split view navigation nnoremap h nnoremap j nnoremap k nnoremap l " Substitute command if (exists('+inccommand') && &inccommand != '') nnoremap S :%s/ else " This does not work with live previewing commands (inccommand) since the " replace pattern is already defined and thus everything matching the search " pattern is just deleted. nnoremap S :%s//gc endif " Interact with the system clipboard if (has('clipboard') || has('nvim')) nnoremap y "+y nnoremap p "+p nnoremap P "+P vnoremap y "+y vnoremap p "+p vnoremap P "+P endif " Aesthetics ################################################################### " Use 24-bit (true-color) mode if (has('termguicolors')) set termguicolors " https://github.com/vim/vim/issues/993 if (&term != 'xterm-256color') " set Vim-specific sequences for RGB colors let &t_8f = "\e[38;2;%lu;%lu;%lum" let &t_8b = "\e[48;2;%lu;%lu;%lum" endif endif " use onedark as theme for syntax highlighting syntax on colorscheme onedark " get transparent background of the terminal back " (at least in nvim, i can't get it to work in vanilla) if (has('nvim')) highlight Normal guibg=NONE highlight NonText guibg=NONE endif " Autocommands ################################################################# " Shorter lines in git commits autocmd filetype gitcommit set colorcolumn=50,72 " Spell checking in git commits autocmd filetype gitcommit set spell spelllang=en_us " zshOption is a huge regex that leads to massive lags when scrolling " Be sure to disable it after activating syntax highlighting autocmd filetype zsh syntax clear zshOption " Highlight trailing whitespaces " (https://vim.fandom.com/wiki/Highlight_unwanted_spaces) " Create highlight group highlight ExtraWhitespace ctermbg=red guibg=red " Associate with patter (trailing whitespaces) match ExtraWhitespace /\s\+$/ " apply not only to the first window autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ " Do not match when typing at the end of a line autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@