configs/home/.config/nvim/common.vim

153 lines
5.0 KiB
VimL
Raw Normal View History

2023-07-05 15:03:29 +02:00
" GENERAL CONFIGS ----------------------------------------------------------------------------------
2023-01-23 00:43:33 +01:00
syntax on " syntax highlighting
set nocompatible " disable compatibility to old-time vi
set mouse=v " middle-click paste with
set number
set nocompatible
set hlsearch " highlight search
set incsearch " incremental search
set tabstop=4 " number of columns occupied by a tab
2023-07-05 11:28:16 +02:00
set softtabstop=4 " see multiple spaces as tab stops so <BS> does the right thing
2023-01-23 00:43:33 +01:00
set expandtab " converts tabs to white space
2023-07-05 11:28:16 +02:00
set shiftwidth=4 " width for auto indents
2023-01-23 00:43:33 +01:00
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
2023-07-10 14:48:28 +02:00
set mouse=hr " enable mouse for help file editing and hitting prompts
2023-07-05 15:03:29 +02:00
set cursorline " highlight current cursor line
2023-01-23 00:43:33 +01:00
set ttyfast " Speed up scrolling in Vim
2023-07-05 15:03:29 +02:00
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
2023-03-06 13:05:17 +01:00
set ttimeoutlen=0
2023-01-23 00:43:33 +01:00
2023-07-05 15:03:29 +02:00
" Avoid showing message extra message when using completion
2023-01-23 00:43:33 +01:00
set shortmess+=c
2023-07-05 15:03:29 +02:00
"allow auto-indenting depending on file type
filetype plugin indent on
2023-01-23 00:43:33 +01:00
filetype plugin on
let g:indentLine_char = '│'
2023-07-05 15:03:29 +02:00
" HOTKEYS ------------------------------------------------------------------------------------------
2023-03-25 18:45:49 +01:00
" add lines with double o
2023-01-23 00:43:33 +01:00
noremap oo o<ESC>
noremap OO O<ESC>
2023-03-25 18:45:49 +01:00
" H and L for end and beginning
nmap H ^
nmap L $
2023-07-04 21:33:12 +02:00
vmap H ^
vmap L $
2023-03-25 18:45:49 +01:00
2023-07-05 15:03:29 +02:00
" useful functions for arrow keys
" (and force the user to use `hjkl`)
2023-05-08 00:30:07 +02:00
" right/left to add/remove a tab in the beginning of the line.
nmap <Left> <<
nmap <Right> >>
" same for visual mode (plus reselecting stuff for visual mode)
vmap <Left> <gv
vmap <Right> >gv
" up and down move lines up and down
nmap <Up> :m -2<CR>
nmap <Down> :m +1<CR>
" same for visual mode (plus reselecting stuff for visual mode)
vmap <Up> :m -2<CR>
vmap <Down> :m +1<CR>
2023-07-05 15:03:29 +02:00
" resize windows
2023-07-05 15:49:40 +02:00
nnoremap <C-Left> :vertical resize -1<CR>
nnoremap <C-Right> :vertical resize +1<CR>
2023-07-05 15:03:29 +02:00
nnoremap <C-Up> :resize -1<CR>
nnoremap <C-Down> :resize +1<CR>
" hit F3 to toggle search highlighting"
2023-01-23 00:43:33 +01:00
nnoremap <F3> :set hlsearch!<CR>
nnoremap <SPACE> <Nop>
let mapleader=" "
map <leader>t :echo "leader tested!"<CR>
map <leader>h :noh<CR>
2023-07-05 11:28:16 +02:00
" copy to Wayland clipboard when leader is used. (note, install gvim for this)
2023-01-23 01:06:18 +01:00
vnoremap <leader>wy y :call system("wl-copy", @")<CR>
nnoremap <leader>wY Y :call system("wl-copy", @")<CR>
nnoremap <leader>wy y :call system("wl-copy", @")<CR>
nnoremap <leader>wyy yy :call system("wl-copy", @")<CR>
2023-01-23 00:43:33 +01:00
" copy to system clipboard when leader is used. (note, install gvim for this)
vnoremap <leader>y "+y
nnoremap <leader>Y "+Y
nnoremap <leader>y "+y
nnoremap <leader>yy "+yy
2023-07-05 15:03:29 +02:00
" don't write the pasted upon stuff in visual mode into the register
2023-02-17 19:46:58 +01:00
vnoremap p pgvy
2023-01-23 00:43:33 +01:00
" open terminal with F12
nnoremap <F12> :terminal<CR>
" vsplit with <Leader>, then "
map <Leader>" :vsplit<CR>
" split with <Leader>, then %"
map <Leader>% :split<CR>
2023-07-05 15:03:29 +02:00
" join with <leader>j
nnoremap <leader>j :join<CR>
2023-07-07 13:27:30 +02:00
" join up with <leader>J
nnoremap <leader>J :move .-2<CR> :join<CR>
" split lines with <leader>s
nnoremap <leader>s i<CR><ESC>
" split lines up with <leader>S
nnoremap <leader>S i<CR><ESC> V:m -2<CR>
2023-07-05 11:28:16 +02:00
2023-07-06 13:15:53 +02:00
" move screen a line up/down with alt U/D
nmap <A-u> kzz
nmap <A-d> jzz
2023-07-05 15:03:29 +02:00
" spell checking -----------------------------------------------------------------------------------
2023-07-05 11:28:16 +02:00
set spell spelllang=en
2023-07-06 10:19:15 +02:00
" set a location
set spellfile=~/.config/nvim/spell/en.utf-8.add
2023-07-05 11:28:16 +02:00
" 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
2023-07-06 10:00:36 +02:00
" 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("<cword>"))
return fzf#run({'source': suggestions, 'sink': function("FzfSpellSink"), 'down': 10 })
endfunction
nnoremap z<space> :call FzfSpell()<CR>
2023-07-05 12:07:30 +02:00
" don't make things written as `something` a typo
2023-07-05 15:03:29 +02:00
syntax region cBackTickNoSpell start=+`+ end=+`+
2023-07-05 12:07:30 +02:00
\ contained containedin=cComment,cCommentL transparent
\ contains=@NoSpell
" don't make lines starting with `//!` a typo (used by rust docs)
2023-07-05 15:03:29 +02:00
syntax region cRusDocCommentNoSpell start=+//!+ end='\z1' contained extend
2023-07-05 12:07:30 +02:00
\ contained containedin=cComment,cCommentL transparent
\ contains=@NoSpell