diff --git a/.config/vim/vimrc b/.config/vim/vimrc deleted file mode 100644 index da36bb0..0000000 --- a/.config/vim/vimrc +++ /dev/null @@ -1,283 +0,0 @@ -" Set leader key -let mapleader = "\" -let maplocalleader = mapleader - -" Plugins ###################################################################### -" ARM assembly syntax highlighting -autocmd BufNewFile,BufRead *.s,*.S packadd! arm-syntax-vim | set filetype=arm -" Auto completion -" needs vim >= 8.1.1719 to support features like popup and text property. -if (has('patch-8.1.1719') || has('nvim')) - let g:coc_global_extensions = - \ ['coc-clangd', 'coc-sh', 'coc-python', 'coc-vimtex'] - packadd! coc.nvim - source $XDG_CONFIG_HOME/vim/coc.nvim.vim -endif -" Automatically close parentheses, brackets, quotes, etc. -packadd! delimitMate -" Fuzzy finder -packadd! fzf -packadd! fzf.vim -nmap f :Files -" Theme -packadd! onedark.vim -" LaTeX -autocmd BufNewFile,BufRead *.tex packadd! vimtex - \ | source $XDG_CONFIG_HOME/vim/vimtex.vim -" Git information -packadd! vim-gitgutter -" ctags -packadd! vim-gutentags -nmap t :Tags -" Surround text with parentheses, brackets, quotes, tags, etc. -let g:surround_no_mappings = 1 -packadd! vim-surround -source $XDG_CONFIG_HOME/vim/vim-surround.vim - -" 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 -" Auto-wrap text and comments; automatically add comment leader when creating -" new lines and delete it when joining; do not break already too long lines; -" allow formatting with gq. -set formatoptions=tcroqlj -" Autoindent new lines -set autoindent -" Copy structure of the existing lines indent when autoindenting a new line -set copyindent -" Keep lines under 80 characters. -set textwidth=80 -" Do not insert two spaces before a new sentence when formatting -set nojoinspaces -" 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 -" 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 -" Show ruler at 80 columns -set colorcolumn=80 -" Show menu for possible matches when using command-line completing. -if (has('wildmenu')) - set wildmenu -endif -" Command-line completion tab behavior: -" First: Complete longest common string and show wildmenu -" Second: Complete each full match (Cycle through the menu) -set wildmode=longest:full,full -" Show typed (partial) command on screen. -if (has('cmdline_info')) - set showcmd -endif -" Show whitespace characters -set list -set listchars=tab:>· -" Keep current line away from top/bottom borders of the buffer when scrolling -set scrolloff=15 -" Enable mouse in normal and visual mode -set mouse=nv - -" Keybindings ################################################################## -" 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 -" Create new panes -nnoremap N :vsplit -nnoremap n :split -" Move between panes -nnoremap -nnoremap -nnoremap -nnoremap - -" Substitute command -if (exists('+inccommand') && &inccommand != '') - nnoremap S :%s/ - vnoremap 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 - vnoremap S :s//gc -endif - -" Interact with the system clipboard -if (has('clipboard') || has('nvim')) - noremap y "+y - noremap d "+d - noremap p "+p - noremap P "+P -endif - -" Ctrl-Backspace should delete words in insert mode and on command-line. -noremap! - -" Correct word with best/first suggestion. -noremap c 1z= - -" Toggle spell, cycle and set spelllang -map st :set spell=!&spell -map sc :call CycleSpellLang() -map ss :set spelllang= -" Umlaute and sz in Insert and Command-line mode when spelllang is set to de -autocmd OptionSet spelllang call NewSpellLang(v:option_new, v:option_old) -function! NewSpellLang(new_lang, old_lang) - let mappings = { - \ 'ae': 'ä', - \ 'Ae': 'Ä', - \ 'oe': 'ö', - \ 'Oe': 'Ö', - \ 'ue': 'ü', - \ 'Ue': 'Ü', - \ 'sz': 'ß', - \ } - if (a:new_lang == 'de') - for [key, value] in items(mappings) - execute 'map! ' key value - endfor - elseif (a:old_lang == 'de') - for key in keys(mappings) - execute 'unmap! ' key - endfor - endif -endfunction - -" Jump through jump table but center -noremap zz -noremap zz -nmap - -" Terminal -if (has('nvim')) - " tnoremap - nmap :split +terminali - nmap v :vsplit +terminali -elseif (has('terminal')) - nmap :terminal -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 - -" Commands ##################################################################### -command! DiffOrig vert new | set buftype=nofile | read ++edit # | 0d_ | diffthis - \ | wincmd p | diffthis - -" Functions #################################################################### -" Toggle spell language between German and English -function! CycleSpellLang() - if (&spelllang == 'en') - set spelllang=de - else - set spelllang=en - endif -endfunction - -" Autocommands ################################################################# -" 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\+\%#\@" +let maplocalleader = mapleader diff --git a/.config/vim/vimrc.d/20-plugins.vim b/.config/vim/vimrc.d/20-plugins.vim new file mode 100644 index 0000000..e80701a --- /dev/null +++ b/.config/vim/vimrc.d/20-plugins.vim @@ -0,0 +1,34 @@ +" Plugins ###################################################################### +" ARM assembly syntax highlighting +autocmd BufNewFile,BufRead *.s,*.S packadd! arm-syntax-vim | set filetype=arm +" Auto completion +" needs vim >= 8.1.1719 to support features like popup and text property. +if (has('patch-8.1.1719') || has('nvim')) + let g:coc_global_extensions = + \ ['coc-clangd', 'coc-sh', 'coc-python', 'coc-vimtex'] + packadd! coc.nvim + source $XDG_CONFIG_HOME/vim/coc.nvim.vim +endif +" Automatically close parentheses, brackets, quotes, etc. +packadd! delimitMate +" Fuzzy finder +packadd! fzf +packadd! fzf.vim +nmap f :Files +" Theme +packadd! onedark.vim +" LaTeX +autocmd BufNewFile,BufRead *.tex packadd! vimtex + \ | source $XDG_CONFIG_HOME/vim/vimtex.vim +" Git information +packadd! vim-gitgutter +" ctags +packadd! vim-gutentags +nmap t :Tags +" Surround text with parentheses, brackets, quotes, tags, etc. +let g:surround_no_mappings = 1 +packadd! vim-surround +source $XDG_CONFIG_HOME/vim/vim-surround.vim + +" Load filetype plugins +filetype plugin indent on diff --git a/.config/vim/vimrc.d/30-settings.vim b/.config/vim/vimrc.d/30-settings.vim new file mode 100644 index 0000000..39dbca9 --- /dev/null +++ b/.config/vim/vimrc.d/30-settings.vim @@ -0,0 +1,66 @@ +" 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 +" Auto-wrap text and comments; automatically add comment leader when creating +" new lines and delete it when joining; do not break already too long lines; +" allow formatting with gq. +set formatoptions=tcroqlj +" Autoindent new lines +set autoindent +" Copy structure of the existing lines indent when autoindenting a new line +set copyindent +" Keep lines under 80 characters. +set textwidth=80 +" Do not insert two spaces before a new sentence when formatting +set nojoinspaces +" 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 +" 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 +" Show ruler at 80 columns +set colorcolumn=80 +" Show menu for possible matches when using command-line completing. +if (has('wildmenu')) + set wildmenu +endif +" Command-line completion tab behavior: +" First: Complete longest common string and show wildmenu +" Second: Complete each full match (Cycle through the menu) +set wildmode=longest:full,full +" Show typed (partial) command on screen. +if (has('cmdline_info')) + set showcmd +endif +" Show whitespace characters +set list +set listchars=tab:>· +" Keep current line away from top/bottom borders of the buffer when scrolling +set scrolloff=15 +" Enable mouse in normal and visual mode +set mouse=nv diff --git a/.config/vim/vimrc.d/40-keybindings.vim b/.config/vim/vimrc.d/40-keybindings.vim new file mode 100644 index 0000000..aaed18d --- /dev/null +++ b/.config/vim/vimrc.d/40-keybindings.vim @@ -0,0 +1,85 @@ +" Keybindings ################################################################## +" 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 +" Create new panes +nnoremap N :vsplit +nnoremap n :split +" Move between panes +nnoremap +nnoremap +nnoremap +nnoremap + +" Substitute command +if (exists('+inccommand') && &inccommand != '') + nnoremap S :%s/ + vnoremap 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 + vnoremap S :s//gc +endif + +" Interact with the system clipboard +if (has('clipboard') || has('nvim')) + noremap y "+y + noremap d "+d + noremap p "+p + noremap P "+P +endif + +" Ctrl-Backspace should delete words in insert mode and on command-line. +noremap! + +" Correct word with best/first suggestion. +noremap c 1z= + +" Toggle spell, cycle and set spelllang +map st :set spell=!&spell +map sc :call CycleSpellLang() +map ss :set spelllang= +" Umlaute and sz in Insert and Command-line mode when spelllang is set to de +autocmd OptionSet spelllang call NewSpellLang(v:option_new, v:option_old) +function! NewSpellLang(new_lang, old_lang) + let mappings = { + \ 'ae': 'ä', + \ 'Ae': 'Ä', + \ 'oe': 'ö', + \ 'Oe': 'Ö', + \ 'ue': 'ü', + \ 'Ue': 'Ü', + \ 'sz': 'ß', + \ } + if (a:new_lang == 'de') + for [key, value] in items(mappings) + execute 'map! ' key value + endfor + elseif (a:old_lang == 'de') + for key in keys(mappings) + execute 'unmap! ' key + endfor + endif +endfunction + +" Jump through jump table but center +noremap zz +noremap zz +nmap + +" Terminal +if (has('nvim')) + " tnoremap + nmap :split +terminali + nmap v :vsplit +terminali +elseif (has('terminal')) + nmap :terminal +endif diff --git a/.config/vim/vimrc.d/50-aesthetics.vim b/.config/vim/vimrc.d/50-aesthetics.vim new file mode 100644 index 0000000..55c1bc4 --- /dev/null +++ b/.config/vim/vimrc.d/50-aesthetics.vim @@ -0,0 +1,21 @@ +" 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 diff --git a/.config/vim/vimrc.d/60-commands.vim b/.config/vim/vimrc.d/60-commands.vim new file mode 100644 index 0000000..5fbf50b --- /dev/null +++ b/.config/vim/vimrc.d/60-commands.vim @@ -0,0 +1,3 @@ +" Commands ##################################################################### +command! DiffOrig vert new | set buftype=nofile | read ++edit # | 0d_ | diffthis + \ | wincmd p | diffthis diff --git a/.config/vim/vimrc.d/70-functions.vim b/.config/vim/vimrc.d/70-functions.vim new file mode 100644 index 0000000..b93492d --- /dev/null +++ b/.config/vim/vimrc.d/70-functions.vim @@ -0,0 +1,9 @@ +" Functions #################################################################### +" Toggle spell language between German and English +function! CycleSpellLang() + if (&spelllang == 'en') + set spelllang=de + else + set spelllang=en + endif +endfunction diff --git a/.config/vim/vimrc.d/80-autocommands.vim b/.config/vim/vimrc.d/80-autocommands.vim new file mode 100644 index 0000000..be01ceb --- /dev/null +++ b/.config/vim/vimrc.d/80-autocommands.vim @@ -0,0 +1,55 @@ +" Autocommands ################################################################# +" 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\+\%#\@