diff --git a/vimrc b/vimrc index e69de29..25872e4 100644 --- a/vimrc +++ b/vimrc @@ -0,0 +1,278 @@ +call plug#begin() +Plug 'drewtempelmeyer/palenight.vim' +Plug 'vim-airline/vim-airline' +Plug 'wlangstroth/vim-racket' +Plug 'sheerun/vim-polyglot' +Plug 'rust-lang/rust.vim' +Plug 'preservim/tagbar' +Plug 'universal-ctags/ctags' +Plug 'luochen1990/rainbow' +Plug 'vim-syntastic/syntastic' +Plug 'itchyny/lightline.vim' +Plug 'tpope/vim-surround' +Plug 'neoclide/coc.nvim', { 'branch': 'release' } +Plug 'tommcdo/vim-lion' +Plug 'Shirk/vim-gas' +Plug 'ntpeters/vim-better-whitespace' +call plug#end() + +" Get syntax files from config folder +set runtimepath+=~/.config/nvim/syntax + +" Theme +colorscheme palenight + +" Disable C-z from job-controlling neovim +nnoremap + +" Remap C-c to +nmap +imap +vmap +omap + +" Syntax highlighting +syntax on + +" Position in code +set number +set ruler + +" Don't make noise +set visualbell + +" default file encoding +set encoding=utf-8 + +" Line wrap +set wrap + +" Function to set tab width to n spaces +function! SetTab(n) + let &l:tabstop=a:n + let &l:softtabstop=a:n + let &l:shiftwidth=a:n + set expandtab +endfunction + +command! -nargs=1 SetTab call SetTab() + +" Function to trim extra whitespace in whole file +function! Trim() + let l:save = winsaveview() + keeppatterns %s/\s\+$//e + call winrestview(l:save) +endfun + +command! -nargs=0 Trim call Trim() + +set laststatus=2 + +" Highlight search results +set hlsearch +set incsearch + +" auto + smart indent for code +set autoindent +set smartindent + +set t_Co=256 + +" ASM == JDH8 +augroup jdh8_ft + au! + autocmd BufNewFile,BufRead *.asm set filetype=jdh8 + autocmd BufNewFile,BufRead *.asm set syntax=nasm +augroup END + +" SQL++ == SQL +augroup sqlpp_ft + au! + autocmd BufNewFile,BufRead *.sqlp set syntax=sql +augroup END + +" .S == gas +augroup gas_ft + au! + autocmd BufNewFile,BufRead *.S set syntax=gas +augroup END + +" JFlex syntax highlighting + augroup jfft + au BufRead,BufNewFile *.flex,*.jflex set filetype=jflex + augroup END + au Syntax jflex so ~/.vim/syntax/jflex.vim + + " Mouse support + set mouse=a + + " Map F8 to Tagbar + nmap :TagbarToggle + + " CTags config + let g:Tlist_Ctags_Cmd='/usr/local/Cellar/ctags/5.8_1/bin/ctags' + + " disable backup files + set nobackup + set nowritebackup + + " no delays! + set updatetime=300 + + set cmdheight=1 + set shortmess+=c + + set signcolumn=yes + +" Use tab for trigger completion with characters ahead and navigate. +" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by +" other plugin before putting this into your config. +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? "\" : "\" + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +" Use to trigger completion. +if has('nvim') + inoremap coc#refresh() +else + inoremap coc#refresh() +endif + +" Make auto-select the first completion item and notify coc.nvim to +" format on enter, could be remapped by other vim plugin +"inoremap pumvisible() ? coc#_select_confirm() +" \: "\u\\=coc#on_enter()\" + +" Use `[g` and `]g` to navigate diagnostics +" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. +nmap [g (coc-diagnostic-prev) +nmap ]g (coc-diagnostic-next) + +" GoTo code navigation. +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) + +" Use K to show documentation in preview window. +nnoremap K :call show_documentation() + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif +endfunction + +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') + +" Symbol renaming. +nmap rn (coc-rename) + +" Formatting selected code. +xmap f (coc-format-selected) +nmap f (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: `aap` for current paragraph +xmap a (coc-codeaction-selected) +nmap a (coc-codeaction-selected) + +" Remap keys for applying codeAction to the current buffer. +nmap ac (coc-codeaction) +" Apply AutoFix to problem on the current line. +nmap qf (coc-fix-current) + +" Map function and class text objects +" NOTE: Requires 'textDocument.documentSymbol' support from the language server. +xmap if (coc-funcobj-i) +omap if (coc-funcobj-i) +xmap af (coc-funcobj-a) +omap af (coc-funcobj-a) +xmap ic (coc-classobj-i) +omap ic (coc-classobj-i) +xmap ac (coc-classobj-a) +omap ac (coc-classobj-a) + +" Remap and for scroll float windows/popups. +if has('nvim-0.4.0') || has('patch-8.2.0750') + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" +endif + +" Use CTRL-S for selections ranges. +" Requires 'textDocument/selectionRange' support of language server. +nmap (coc-range-select) +xmap (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', ) + +" 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 a :CocList diagnostics +" Manage extensions. +nnoremap e :CocList extensions +" Show commands. +nnoremap c :CocList commands +" Find symbol of current document. +nnoremap o :CocList outline +" Search workspace symbols. +nnoremap s :CocList -I symbols +" Do default action for next item. +nnoremap j :CocNext +" Do default action for previous item. +nnoremap k :CocPrev +" Resume latest coc list. +nnoremap p :CocListResume + +" add cocstatus into lightline +let g:lightline = { + \ 'colorscheme': 'wombat', + \ 'active': { + \ 'left': [ [ 'mode', 'paste' ], + \ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ] + \ }, + \ 'component_function': { + \ 'cocstatus': 'coc#status' + \ }, + \ } + +autocmd User CocStatusChange,CocDiagnosticChange call lightline#update() + +syntax enable +au BufRead,BufNewFile .todo set filetype=zsh \ No newline at end of file