" GENERAL CONFIGS ---------------------------------------------------------------------------------- syntax on " syntax highlighting set nocompatible " disable compatibility to old-time vi set number set nocompatible set hlsearch " highlight search set incsearch " incremental search set tabstop=4 " number of columns occupied by a tab set softtabstop=4 " see multiple spaces as tab stops so does the right thing set expandtab " converts tabs to white space set shiftwidth=4 " width for auto indents set autoindent " indent a new line the same amount as the line just typed set number " add line numbers set wildmode=longest,list " get bash-like tab completions set cc=100 " set an 100 column border for good coding style set mouse=a " enable mouse for help file editing and hitting prompts set cursorline " highlight current cursor line set ttyfast " Speed up scrolling in Vim set fdm=indent " folding method syntax set foldlevel=10 " only fold when a certain complexity is reached by default. " This applies only at startup. set numberwidth=4 " How much space the line numbers should take set signcolumn=yes " Show extra icons in the line numbers (like git marks, errors) set timeout timeoutlen=400 " How long to wait for non prefix free hotkey melodies set ttimeoutlen=0 " Avoid showing message extra message when using completion set shortmess+=c "allow auto-indenting depending on file type filetype plugin indent on filetype plugin on let g:indentLine_char = '│' " HOTKEYS ------------------------------------------------------------------------------------------ " add lines with double o noremap oo o noremap OO O " H and L for end and beginning nmap H ^ nmap L $ vmap H ^ vmap L $ " useful functions for arrow keys " (and force the user to use `hjkl`) " right/left to add/remove a tab in the beginning of the line. nmap << nmap >> " same for visual mode (plus reselecting stuff for visual mode) vmap >gv " up and down move lines up and down nmap :m -2 nmap :m +1 " same for visual mode (plus reselecting stuff for visual mode) vmap :m -2 vmap :m +1 " resize windows nnoremap :vertical resize -1 nnoremap :vertical resize +1 nnoremap :resize -1 nnoremap :resize +1 " hit F3 to toggle search highlighting" nnoremap :set hlsearch! nnoremap let mapleader=" " map t :echo "leader tested!" map h :noh " copy to Wayland clipboard when leader is used. (note, install gvim for this) vnoremap wy y :call system("wl-copy", @") nnoremap wY Y :call system("wl-copy", @") nnoremap wy y :call system("wl-copy", @") nnoremap wyy yy :call system("wl-copy", @") " copy to system clipboard when leader is used. (note, install gvim for this) vnoremap y "+y nnoremap Y "+Y nnoremap y "+y nnoremap yy "+yy " don't write the pasted upon stuff in visual mode into the register vnoremap p pgvy " open terminal with F12 nnoremap :terminal " vsplit with , then " map " :vsplit " split with , then %" map % :split " join with j nnoremap j :join " join up with J nnoremap J :move .-2 :join " split lines with s nnoremap s i " split lines up with S nnoremap S i V:m -2 " move screen a line up/down with alt U/D nmap kzz nmap jzz " spell checking ----------------------------------------------------------------------------------- set spell spelllang=en,de " set a location set spellfile=~/.config/nvim/spell/en.utf-8.add " go to last or next misspelled word nnoremap zn ]s nnoremap zN [s " same as above but only with bad words (unrecognized) nnoremap Zn ]S nnoremap ZN [S " mark correct with zg, mark bad with zw, undo with zug/zuw " fancy fzf correct with zc, default is z= but that sucks for qwertz keyboards function! FzfSpellSink(word) exe 'normal! "_ciw'.a:word endfunction function! FzfSpell() let suggestions = spellsuggest(expand("")) return fzf#run({'source': suggestions, 'sink': function("FzfSpellSink"), 'down': 10 }) endfunction nnoremap z :call FzfSpell() " don't make things written as `something` a typo syntax region cBackTickNoSpell start=+`+ end=+`+ \ contained containedin=cComment,cCommentL transparent \ contains=@NoSpell " don't make lines starting with `//!` a typo (used by rust docs) syntax region cRusDocCommentNoSpell start=+//!+ end='\z1' contained extend \ contained containedin=cComment,cCommentL transparent \ contains=@NoSpell