snippets/nvim-config/init.vim

498 lines
15 KiB
VimL

call plug#begin('~/.local/share/nvim/site/plugged')
" airline
Plug 'https://github.com/bling/vim-airline.git'
Plug 'vim-airline/vim-airline-themes'
" git
Plug 'https://github.com/tpope/vim-fugitive.git'
" Shougos UI-Plugin
Plug 'Shougo/denite.nvim'
" Plug 'roxma/nvim-completion-manager'
" showing function-signatures/doc on completion
Plug 'Shougo/echodoc.vim'
" Tab-Completion
" Plug 'ervandew/supertab'
" vim-sourround
Plug 'https://github.com/tpope/vim-surround.git'
" theme
Plug 'https://github.com/morhetz/gruvbox.git'
Plug 'frankier/neovim-colors-solarized-truecolor-only'
" rainbow-parentethies
Plug 'luochen1990/rainbow'
" fuzzy finder
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" git-gutter (little + - and ~ left)
Plug 'https://github.com/airblade/vim-gitgutter.git'
" Tabular
Plug 'https://github.com/godlygeek/tabular.git'
" Multiline-Comments
Plug 'tomtom/tcomment_vim'
" Auto-Formatting
Plug 'Chiel92/vim-autoformat'
" show colors (#abc) with that background-color
Plug 'ap/vim-css-color'
" multiline-stuff
Plug 'terryma/vim-multiple-cursors'
" Icons
Plug 'ryanoasis/vim-devicons'
" Markdown-Support
Plug 'plasticboy/vim-markdown'
Plug 'dhruvasagar/vim-table-mode'
Plug 'suan/vim-instant-markdown'
" Code-Folds
Plug 'tmhedberg/SimpylFold'
" better closing
Plug 'mhinz/vim-sayonara'
" Session-Management
Plug 'xolox/vim-session' | Plug 'xolox/vim-misc'
" CoC
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Clojure
Plug 'guns/vim-sexp', {'for': 'clojure'}
Plug 'liquidz/vim-iced', {'for': 'clojure'}
Plug 'liquidz/vim-iced-coc-source', {'for': 'clojure'}
" todo.txt
Plug 'freitass/todo.txt-vim'
" LSP
Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
Plug 'neovim/nvim-lspconfig', {'branch': 'v0.1.6'}
call plug#end()
" SETTINGS
" set leader to space
let mapleader= "\<SPACE>"
let maplocalleader= ";"
" autocmd InsertEnter * :set number
" autocmd InsertEnter * :set norelativenumber
" autocmd InsertLeave * :set relativenumber
" autocmd InsertLeave * :set nonumber
set relativenumber
set number
set shiftwidth=2
set tabstop=2
" show cmd - especially leader
set showcmd
" expand tabs with spaces
set expandtab
" Tell Vim which characters to show for expanded TABs,
" trailing whitespace, and end-of-lines. VERY useful!
if &listchars ==# 'eol:$'
set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
endif
set list " Show problematic characters.
" Also highlight all tabs and trailing whitespace characters.
highlight ExtraWhitespace ctermbg=darkgreen guibg=darkgreen
match ExtraWhitespace /\s\+$\|\t/
set hlsearch " Highlight search results.
set ignorecase " Make searching case insensitive
set smartcase " ... unless the query has capital letters.
set incsearch " Incremental search.
set gdefault " Use 'g' flag by default with :s/foo/bar/.
set magic " Use 'magic' patterns (extended regular expressions).
"set inccommand=nosplit " Use live-preview of search/replace etc.
set conceallevel=2 " Allow things to be visually opressed (i.e. *foo* be italic)
set mouse=a " enable mouse
set foldenable " enable folding
set undofile " enable undo over sessions
set undodir="$HOME/.VIM_UNDO_FILES" " save in this path
set laststatus=3 " only 1 statusline, not 1 per window
highlight WinSeperator guibg=None
set hidden
let g:loaded_perl_provider = 0
" LSP Config
lua << EOF
require("mason").setup()
require("mason-lspconfig").setup()
EOF
" Use <C-L> to clear the highlighting of :set hlsearch.
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
endif
" Remember cursor position between vim sessions
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
" center buffer around cursor when opening files
autocmd BufRead * normal zz
"" KEY-BINDINGS
" use <TAB> to fold/unfold
nnoremap <TAB> za
" <Tab>: completion
function! CheckBackSpace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction
inoremap <silent><expr> <Tab>
\ pumvisible() ? "\<C-N>" :
\ CheckBackSpace() ? "\<Tab>" :
\ coc#refresh()
" <S-Tab>: completion back
inoremap <silent><expr> <S-Tab> pumvisible() ? "\<C-P>" : "\<C-H>"
" <CR>: confirm completion, or insert <CR>
inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"
" use <C-J> to Jump to definition instead of <C-]> (default)
nmap <C-J> <C-]>
" c-d to delete line in insert-mode
inoremap <C-D> <esc>ddi
" exit terminal-mode
tnoremap <C-t><C-t> <C-\><C-n>
""""""""""""""""""""""""""""""""""""""""""""" Coc Keys
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
" Use K to show documentation in preview window
nnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation()
if CocAction('hasProvider', 'hover')
call CocActionAsync('doHover')
else
call feedkeys('K', 'in')
endif
endfunction
" Highlight the symbol and its references when holding the cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming
nmap <leader>rn <Plug>(coc-rename)
" Formatting selected code
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s)
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
" Update signature help on jump placeholder
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end
" Applying code actions to the selected code block
" Example: `<leader>aap` for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying code actions at the cursor position
nmap <leader>ac <Plug>(coc-codeaction-cursor)
" Remap keys for apply code actions affect whole buffer
nmap <leader>as <Plug>(coc-codeaction-source)
" Apply the most preferred quickfix action to fix diagnostic on the current line
nmap <leader>qf <Plug>(coc-fix-current)
" Remap keys for applying refactor code actions
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
" Run the Code Lens action on the current line
nmap <leader>cl <Plug>(coc-codelens-action)
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Remap <C-f> and <C-b> to scroll float windows/popups
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" Use CTRL-S for selections ranges
" Requires 'textDocument/selectionRange' support of language server
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffer
command! -nargs=0 Format :call CocActionAsync('format')
" Add `:Fold` command to fold current buffer
command! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add `:OR` command for organize imports of the current buffer
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
" Add (Neo)Vim's native statusline support
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
" Mappings for CoCList
" Show all diagnostics
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
" Do default action for previous item
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" autoformat code if possible (read docs on vim-autoformat!)
"noremap <leader>f :Autoformat<CR>
noremap <leader>TM :TableModeToggle<CR>
" multi-cursor
let g:multi_cursor_next_key='<C-n>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'
" Align blocks of text and keep them selected
vmap < <gv
vmap > >gv
nnoremap <leader>d "_d
vnoremap <leader>d "_d
" toggle comments
vnoremap <leader>/ :TComment<cr>
" Open file menu
nnoremap <Leader>o :Files<CR>
" Open buffer menu
nnoremap <Leader>b :Buffers<CR>
" Open most recently used files
nnoremap <Leader>f :GFiles<CR>
" Open Tag-Search
nnoremap <Leader>t :Tags<CR>
" Expand patterns in Haskell
"nnoremap <Leader>hc :GhcModSplitFunCase<CR>
" Expand function signatures in Haskell
"nnoremap <Leader>hs :GhcModSigCodegen<CR>
" Get Type-Info under Cursor
"nnoremap <Leader>ht :GhcModType<CR>
" " Copy to clipboard
vnoremap <leader>y "+y
nnoremap <leader>Y "+yg_
nnoremap <leader>y "+y
nnoremap <leader>yy "+yy
" " Paste from clipboard
nnoremap <leader>p "+p
nnoremap <leader>P "+P
vnoremap <leader>p "+p
vnoremap <leader>P "+P
" Clear stuff
nnoremap <Leader><Leader> :nohlsearch<CR>:cclose<CR>
" Clojure-Bindings
" Enable vim-iced's default key mapping
" This is recommended for newbies
let g:iced_enable_default_key_mappings = v:true
let g:sexp_enable_insert_mode_mappings = 0 " stop inserting brackets
let g:iced_enable_clj_kondo_analysis = v:true " kondo analysis
let g:iced_enable_clj_kondo_local_analysis = v:true " also analyse local.
let g:iced_enable_auto_document = 'any' " automatically open documentation
" THEME-RELATED STUFF
syntax enable
filetype plugin on
" enable true color
set termguicolors
" enable italics, load colorscheme
let g:gruvbox_italic=1
set background=dark
colorscheme gruvbox
let g:rainbow_active = 1
let &colorcolumn="80,".join(range(120,200),",")
" spell checking for markdown
autocmd BufRead,BufNewFile *.md setlocal spell complete+=kspell textwidth=80
autocmd BufRead,BufNewFile *.markdown setlocal spell complete+=kspell textwidth=80
autocmd BufRead,BufNewFile *.md hi SpellBad guibg=#582828 gui=none
autocmd BufRead,BufNewFile *.markdown hi SpellBad guibg=#582828 gui=none
" autocmd FileType markdown nnoremap <Leader>t :Toc<CR>
" set languages to english and german
set spelllang=de_de,en_us
let g:vim_markdown_toc_autofit = 0
let g:vim_markdown_emphasis_multiline = 1
let g:vim_markdown_math = 1
let g:vim_markdown_new_list_item_indent = 2
let g:vim_markdown_folding_level = 0
" disable instant-markdown-preview
let g:instant_markdown_autostart = 0
au FileType markdown setl shell=bash
let g:haskell_enable_quantification = 1 " enable highlighting of forall
let g:haskell_enable_recursivedo = 1 " enable highlighting of mdo and rec
let g:haskell_enable_arrowsyntax = 1 " enable highlighting of proc
let g:haskell_enable_pattern_synonyms = 1 " enable highlighting of pattern
let g:haskell_enable_typeroles = 1 " enable highlighting of type roles
let g:haskell_enable_static_pointers = 1 " enable highlighting of static
let g:haskell_indent_if = 3
let g:haskell_indent_case = 2
let g:haskell_indent_let = 4
let g:haskell_indent_where = 6
let g:haskell_indent_do = 3
let g:haskell_indent_in = 1
let g:haskell_indent_guard = 2
" SNIPPETS
" " Emmet customization
" " Enable Emmet in all modes
" " Remapping <C-y>, just doesn't cut it.
" function! s:expand_html_tab()
" " try to determine if we're within quotes or tags.
" " if so, assume we're in an emmet fill area.
" let line = getline('.')
" if col('.') < len(line)
" let line = matchstr(line, '[">][^<"]*\%'.col('.').'c[^>"]*[<"]')
" if len(line) >= 2
" return "\<C-n>"
" endif
" endif
" " expand anything emmet thinks is expandable.
" if emmet#isExpandable()
" return "\<C-y>,"
" endif
" " return a regular tab character
" return "\<tab>"
" endfunction
" autocmd FileType html,markdown imap <buffer><expr><tab> <sid>expand_html_tab()
" let g:user_emmet_mode='a'
" let g:user_emmet_complete_tag = 1
" let g:user_emmet_install_global = 0
" autocmd FileType html,css EmmetInstall
" AIRLINE
let g:airline#extensions#tabline#ignore_bufadd_pat = 'gundo|undotree|vimfiler|tagbar|netrw|startify|!'
let g:airline#extensions#tabline#enabled = 1
set hidden
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline_powerline_fonts = 1
let g:airline_theme='understated'
" let g:airline_theme='base16_solarized'
cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'Sayonara' : 'x'
nmap <leader>tt :term<cr>
nmap <leader>, :bnext<CR>
nmap <leader>. :bprevious<CR>
let g:airline#extensions#tabline#buffer_idx_mode = 1
nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9
set guifont=Sauce\ Code\ Pro\ Nerd\ Font\ Complete:h13
" TABULARIZE
nmap <leader>t: :Tabularize /:: /l1c0l0<CR>
nmap <leader>t= :Tabularize /= /l1c0l0<CR>
nmap <leader>tp :Tabularize /\| /l1c0l0<CR>
nmap <leader>t, :Tabularize /, /l1c0l0<CR>
" Table mode
let g:table_mode_corner_corner="+"
let g:table_mode_header_fillchar="="
" Move between windows
nnoremap <M-Left> <C-W><C-H>
nnoremap <M-Down> <C-W><C-J>
nnoremap <M-Up> <C-W><C-K>
nnoremap <M-Right> <C-W><C-L>
" Move between tabs
nnoremap <M-Home> :bNext<CR>
nnoremap <M-End> :bnext<CR>
" Session-Options
let g:session_autoload='yes'
let g:session_autosave='yes'
" Change background quickly
nmap <F9> :let &background = ( &background == "dark" ? "light" : "dark" )<CR>
" BUGFIX UNTIL #6997 gets meged.
set guicursor=