Skip to content

Instantly share code, notes, and snippets.

@jdah
Created June 14, 2021 11:54
Show Gist options
  • Select an option

  • Save jdah/4b4d98c2ced36eb07b017c4ae2c94bab to your computer and use it in GitHub Desktop.

Select an option

Save jdah/4b4d98c2ced36eb07b017c4ae2c94bab to your computer and use it in GitHub Desktop.

Revisions

  1. jdah created this gist Jun 14, 2021.
    274 changes: 274 additions & 0 deletions .vimrc
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,274 @@
    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 <c-z> <nop>
    " Remap C-c to <esc>
    nmap <c-c> <esc>
    imap <c-c> <esc>
    vmap <c-c> <esc>
    omap <c-c> <esc>
    " 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(<f-args>)

    " 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
    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 <F8> :TagbarToggle<CR>
    " 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 <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

    " Make <CR> auto-select the first completion item and notify coc.nvim to
    " format on enter, <cr> could be remapped by other vim plugin
    "inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
    " \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

    " 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>')
    elseif (coc#rpc#ready())
    call CocActionAsync('doHover')
    else
    execute '!' . &keywordprg . " " . expand('<cword>')
    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)
    " Remap <C-f> and <C-b> for 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 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>
    " 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()