summaryrefslogtreecommitdiff
path: root/.vimrc
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2020-12-03 14:22:17 +0200
committerSyndamia <kamen.d.mladenov@protonmail.com>2020-12-03 14:22:17 +0200
commit1d6857927239834da3c5224dc3afb9aad025a741 (patch)
tree07e646854de48bdd54fe86b601aa0619a83071f0 /.vimrc
parent9aa68033583390757cbd65329db8cce9f3078b84 (diff)
downloaddotfiles-1d6857927239834da3c5224dc3afb9aad025a741.tar
dotfiles-1d6857927239834da3c5224dc3afb9aad025a741.tar.gz
dotfiles-1d6857927239834da3c5224dc3afb9aad025a741.zip
Added dotfiles from LinuxMintCinnamon-setup
Diffstat (limited to '.vimrc')
-rw-r--r--.vimrc452
1 files changed, 452 insertions, 0 deletions
diff --git a/.vimrc b/.vimrc
new file mode 100644
index 0000000..dd225a9
--- /dev/null
+++ b/.vimrc
@@ -0,0 +1,452 @@
+"""""""""""""""""""""""""""""""
+" Plugin Manager
+"""""""""""""""""""""""""""""""
+
+call plug#begin('~/.vim/plugged')
+
+""""""""""""""""""""""""""""""
+" Plugins
+
+Plug 'morhetz/gruvbox', {'rtp': 'vim'} " Color theme
+Plug 'junegunn/fzf' " Used for commands like :Commits, :History, :Files
+Plug 'junegunn/fzf.vim'
+Plug 'preservim/nerdtree' " Browse directories (:NERDTree)
+Plug 'Raimondi/delimitMate' " Autocomplete brackets and quotes
+Plug 'tomtom/tcomment_vim' " Toggle comments (gc, gcc)
+Plug 'godlygeek/tabular' " Line up text by a given character (:Tabularize /CHAR)
+Plug 'vim-syntastic/syntastic' " Syntax error checker
+Plug 'neoclide/coc.nvim', {'branch': 'release'} " IntelliSense practically
+Plug 'itchyny/lightline.vim' " Statusline for Vim
+Plug 'tpope/vim-fugitive' " git integration
+Plug 'mbbill/undotree' " Easily interact with undo history
+" Plug 'OmniSharp/omnisharp-vim' " C# tools (autocompletion, ...)
+Plug 'wakatime/vim-wakatime' " Time tracking via wakaime.com
+Plug 'dense-analysis/ale' " Syntax checker via LSP
+Plug 'ryanoasis/vim-devicons' " Icons on stuff like NERDTree
+Plug 'honza/vim-snippets' " Ready snippets for some langauges
+
+""""""""""""""""""""""""""""""""
+
+call plug#end()
+
+"""""""""""""""""""""""""""""""
+" Color scheme settings
+"""""""""""""""""""""""""""""""
+
+colorscheme gruvbox
+set background=dark " Setting dark mode
+let g:gruvbox_contrast_dark='medium'
+
+"""""""""""""""""""""""""""""""
+" NERDTree settings
+"""""""""""""""""""""""""""""""
+
+let NERDTreeCustomOpenArgs={'file':{'where': 't'}} " Open file in new tab, doesn't work only for double-click
+let NERDTreeShowHidden=1
+" Toggle NERDTree with Tab
+nmap <Tab> :NERDTreeToggle<CR>
+
+"""""""""""""""""""""""""""""""
+" Undotree settings
+"""""""""""""""""""""""""""""""
+
+" Toggle undotree with F5
+nmap <F5> :UndotreeToggle<CR>
+
+if !exists('g:undotree_WindowLayout')
+ let g:undotree_WindowLayout = 2
+endif
+
+" e.g. using 'd' instead of 'days' to save some space.
+if !exists('g:undotree_ShortIndicators')
+ let g:undotree_ShortIndicators = 1
+endif
+
+" if set, let undotree window get focus after being opened, otherwise
+" focus will stay in current window.
+if !exists('g:undotree_SetFocusWhenToggle')
+ let g:undotree_SetFocusWhenToggle = 1
+endif
+
+" tree node shape.
+if !exists('g:undotree_TreeNodeShape')
+ let g:undotree_TreeNodeShape = '*'
+endif
+
+if !exists('g:undotree_DiffCommand')
+ let g:undotree_DiffCommand = "diff"
+endif
+
+"""""""""""""""""""""""""""""""
+" Syntastic settings
+"""""""""""""""""""""""""""""""
+
+set statusline+=%#warningmsg#
+set statusline+=%{SyntasticStatuslineFlag()}
+set statusline+=%*
+
+let g:syntastic_always_populate_loc_list=1
+let g:syntastic_auto_loc_list=1
+let g:syntastic_check_on_open=1
+let g:syntastic_check_on_wq=0
+
+"""""""""""""""""""""""""""""""
+" Vim settings
+"""""""""""""""""""""""""""""""
+
+set backspace=indent,eol,start " Better backspace functionality
+
+" Ctrl+c, Ctrl+v, Ctrl+z, Ctrl+a and Ctrl+s bindings
+" Partly taken from: https://gist.github.com/jshih/3423345
+vmap <C-c> "+yi<Esc>
+vmap <C-x> "+c<Esc>
+vmap <C-v> c<ESC>"+p<Esc>
+imap <C-v> <ESC>"+pa
+map <C-a> ggVG
+imap <C-z> <ESC>ui
+imap <C-r> <ESC><C-r>i
+"imap <C-S-z> <C-r> An impossible dream
+imap <C-s> <ESC>:w<CR>a
+
+" The following work the same as usual (as :x and :xa), but can also close running jobs (e.g. terminal windows)
+ca x w <bar> q!
+ca xa wa <bar> qa!
+
+ca tt tab ter
+ca te tabe
+
+" Go between tabs with Ctrl+k (tab to the right) and Ctrl+j (tab to the left)
+nnoremap <C-k> :tabn<CR>
+nnoremap <C-j> :tabp<CR>
+
+set number " Show line numbers to the left
+set cursorline " Highlight the current line
+
+nnoremap = :tab ter ++close lazygit<CR>
+
+" Don't get into insert mode after adding a line with o/O
+nnoremap o o<Esc>
+nnoremap O O<Esc>
+
+" Do omni completion from Ctrl+Space
+nnoremap <C-Space> <C-X><C-O>
+
+set mouse=a " Mouse support
+
+set tabstop=4 " Show tabs as 4 wide
+set shiftwidth=4 " Indent with 4 spaces
+set expandtab " Convert tabs to spaces
+autocmd Filetype css setlocal tabstop=2 " Show CSS tabs as 2 spaces
+
+" When you press F6 it will toggle a "spell check mode",
+" spell is activated and the colorscheme is changed
+nmap <F6> :call SpellCheckModeToggle()<CR>
+
+function! SpellCheckModeToggle()
+ if g:colors_name == 'gruvbox'
+ set spell
+ colorscheme darkblue
+ else
+ set nospell
+ colorscheme gruvbox
+ endif
+endfunction
+
+" Scrolling (shows history) in terminal (except in lazygit)
+" Scroll up to activate it, and press a to deactivate it
+" Slightly modified version of: https://github.com/vim/vim/issues/2490#issuecomment-393973253
+function! ExitNormalMode()
+ unmap <buffer> <silent> <RightMouse>
+ call feedkeys("a")
+endfunction
+
+function! EnterNormalMode()
+ if @% == '!lazygit'
+ tunmap <silent> <ScrollWheelUp>
+ elseif &buftype == 'terminal' && mode('') == 't'
+ call feedkeys("\<c-w>N")
+ call feedkeys("\<c-y>")
+ map <buffer> <silent> <RightMouse> :call ExitNormalMode()<CR>
+ endif
+endfunction
+
+tmap <silent> <ScrollWheelUp> <c-w>:call EnterNormalMode()<CR>
+
+"""""""""""""""""""""""""""""""
+" Lighline settings
+"""""""""""""""""""""""""""""""
+
+set laststatus=2
+
+if !has('gui_running')
+ set t_Co=256
+endif
+
+let g:lightline = {
+ \ 'colorscheme': 'wombat',
+ \ 'active': {
+ \ 'left': [ [ 'mode', 'paste' ],
+ \ [ 'gitbranch', 'filename', 'charvaluehex', 'readonly', 'modified' ] ],
+ \ 'right': [ [ 'lineinfo' ],
+ \ [ 'fileencoding', 'filetype'] ]
+ \ },
+ \ 'component': {
+ \ 'charvaluehex': '0x%B',
+ \ },
+ \ 'component_function': {
+ \ 'gitbranch': 'LightlineFugitive',
+ \ 'readonly': 'LightlineReadonly',
+ \ 'modified': 'LightlineModified',
+ \ 'filetype': 'LightlineFileType'
+ \ },
+ \ 'tabline': {
+ \ 'right': [[]]
+ \ },
+ \ 'tab': {
+ \ 'active': [ 'iconFilename','iconReadonly', 'iconModified' ],
+ \ 'inactive': [ 'iconFilename', 'iconReadonly', 'iconModified' ]
+ \ },
+ \ 'tab_component_function': {
+ \ 'iconFilename': 'LightlineTabFilename',
+ \ 'iconReadonly': 'LightlineTabReadonly',
+ \ 'iconModified': 'LightlineTabModified',
+ \ 'iconClose': 'LightlineTabIconClose'
+ \ },
+ \ 'separator': { 'left': '', 'right': '' },
+ \ 'subseparator': { 'left': '', 'right': '' },
+ \ 'tabline_separator': { 'left': '▒', 'right': '' },
+ \ 'tabline_subseparator': { 'left': '░' }
+ \ }
+
+" Most of the following functions are just modification of source:
+" Examples from doc file - https://github.com/itchyny/lightline.vim/blob/53176a0b75d6389d775d7bce0d494e58fc654f38/doc/lightline.txt#L583
+" Tab source code - https://github.com/itchyny/lightline.vim/blob/master/autoload/lightline/tab.vim
+
+function! LightlineFugitive()
+ if exists('*FugitiveHead')
+ let branch = FugitiveHead()
+ return branch !=# '' ? ' '.branch : ''
+ endif
+ return ''
+endfunction
+
+function! LightlineReadonly()
+ return &ft !~? 'help\|vimfiler' && &readonly ? '' : ''
+endfunction
+
+function! LightlineModified()
+ return &ft =~ 'help\|vimfiler' ? '' : &modified ? '' : &modifiable ? '' : ''
+endfunction
+
+function! LightlineFileType()
+ return strlen(&filetype) ? WebDevIconsGetFileTypeSymbol() . ' ' . &filetype : ''
+endfunction
+
+" Adds the filetype icon in tabs
+function! LightlineTabFilename(n) abort
+ let buflist = tabpagebuflist(a:n)
+ let winnr = tabpagewinnr(a:n)
+ let _ = expand('#'.buflist[winnr - 1].':t')
+ return WebDevIconsGetFileTypeSymbol(_) . ' ' . ( _ !=# '' ? _ : '[No Name]' )
+endfunction
+
+function! LightlineTabReadonly(n) abort
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&readonly') ? '' : ''
+endfunction
+
+function! LightlineTabModified(n) abort
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&modified') ? '' : gettabwinvar(a:n, winnr, '&modifiable') ? '' : ''
+endfunction
+
+"""""""""""""""""""""""""""""""
+" Enable Omni completion
+"""""""""""""""""""""""""""""""
+
+" Omni completion supports C, HTML, CSS, JavaScript, PHP, Python, Ruby, SQL, XML
+
+filetype plugin on
+set omnifunc=syntaxcomplete#Complete " Completion for all supported languages
+
+"""""""""""""""""""""""""""""""
+" Ale settings
+"""""""""""""""""""""""""""""""
+
+let g:ale_linters = {
+\ 'cs': ['OmniSharp'],
+\}
+let b:ale_linters = ['cs']
+
+"""""""""""""""""""""""""""""""
+" OmniSharp settings
+"""""""""""""""""""""""""""""""
+
+autocmd Filetype cs nmap <silent> <buffer> gd : OmniSharpGotoDefinition<CR>
+autocmd Filetype cs nmap <silent> <buffer> gy : OmniSharpTypeLookup<CR>
+autocmd Filetype cs nmap <silent> <buffer> gi : OmniSharpFindImplementations<CR>
+autocmd Filetype cd nmap <silent> <buffer> gr : OmniSharpFindUsages<CR>
+autocmd FileType cs nmap <silent> <buffer> <F2> : OmniSharpRename<CR>
+autocmd FileType cs nmap <silent> <buffer> ff : OmniSharpCodeFormat<CR>
+
+"""""""""""""""""""""""""""""""
+" COC settings
+"""""""""""""""""""""""""""""""
+
+" All of the following is the example configuration with some values modified
+" https://github.com/neoclide/coc.nvim#example-vim-configuration
+
+" TextEdit might fail if hidden is not set.
+set hidden
+
+" Some servers have issues with backup files, see #649.
+set nobackup
+set nowritebackup
+
+" Give more space for displaying messages.
+set cmdheight=2
+
+" Having longer update time (default is 4000 ms = 4 s) leads to noticeable
+" delays and poor user experience.
+set updatetime=300
+
+" Don't pass messages to |ins-completion-menu|.
+set shortmess+=c
+
+" Always show the signcolumn, otherwise it would shift the text each time
+" diagnostics appear/become resolved.
+if has("patch-8.1.1564")
+ " Recently vim can merge signcolumn and number column into one
+ set signcolumn=number
+else
+ set signcolumn=yes
+endif
+
+" Use tab for trigger completion with characters ahead and navigate.
+" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
+" other plugin before putting this into your config.
+inoremap <silent><expr> <TAB>
+ \ pumvisible() ? "\<C-n>" :
+ \ <SID>check_back_space() ? "\<TAB>" :
+ \ coc#refresh()
+inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
+
+function! s:check_back_space() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~# '\s'
+endfunction
+
+" Use <c-space> to trigger completion.
+if has('nvim')
+ inoremap <silent><expr> <c-space> coc#refresh()
+else
+ inoremap <silent><expr> <c-@> coc#refresh()
+endif
+
+" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
+" position. Coc only does snippet and additional edit on confirm.
+" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
+if exists('*complete_info')
+ inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
+else
+ inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
+endif
+
+" 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 <SID>show_documentation()<CR>
+
+function! s:show_documentation()
+ if (index(['vim','help'], &filetype) >= 0)
+ execute 'h '.expand('<cword>')
+ else
+ call CocAction('doHover')
+ 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 codeAction to the selected region.
+" Example: `<leader>aap` for current paragraph
+xmap <leader>a <Plug>(coc-codeaction-selected)
+nmap <leader>a <Plug>(coc-codeaction-selected)
+
+" Remap keys for applying codeAction to the current buffer.
+nmap <leader>ac <Plug>(coc-codeaction)
+" Apply AutoFix to problem on the current line.
+nmap <leader>qf <Plug>(coc-fix-current)
+
+" 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)
+
+" 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 CocAction('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 CocAction('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>
+