set nocompatible filetype off " easier to reach than \ let mapleader=" " " vim-plug if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif call plug#begin('~/.vim/plugged') " git wrapper Plug 'tpope/vim-fugitive' " ack wrapper. :Ack Plug 'mileszs/ack.vim' Plug 'mutewinter/nginx.vim' Plug 'scrooloose/nerdcommenter' Plug 'mustache/vim-mustache-handlebars' " better than ctrl-p Plug 'junegunn/fzf' Plug 'junegunn/fzf.vim' " Use a leader instead of the actual named binding nmap p :Files " Easy bindings for its various modes nmap bb :Buffers " rename a buffer. :rename[!] {newname} Plug 'danro/rename.vim' " ugh this thing "Plug 'Valloric/YouCompleteMe' "let g:ycm_rust_src_path = '~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src' "nnoremap jd :YcmCompleter GoTo Plug 'neoclide/coc.nvim' set shortmess+=c set signcolumn=number " 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. inoremap coc#refresh() " 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. " Note coc#float#scroll works on neovim >= 0.4.0 or vim >= 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)\" : "\" " NeoVim-only mapping for visual mode scroll " Useful on signatureHelp after jump placeholder of snippet expansion if has('nvim') vnoremap coc#float#has_scroll() ? coc#float#nvim_scroll(1, 1) : "\" vnoremap coc#float#has_scroll() ? coc#float#nvim_scroll(0, 1) : "\" 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 Plug 'chaquotay/ftl-vim-syntax' Plug 'itchyny/lightline.vim' let g:lightline = { \ 'colorscheme': 'PaperColor', \ } Plug 'scrooloose/nerdtree' nnoremap . :NERDTreeToggle autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif Plug 'vim-scripts/forth.vim' Plug 'rust-lang/rust.vim' let g:rustfmt_autosave = 1 Plug 'cespare/vim-toml' Plug 'airblade/vim-gitgutter' nnoremap gn :GitGutterNextHunk nnoremap gp :GitGutterPrevHunk Plug 'fatih/vim-go' nnoremap f :GoFmt nnoremap t :GoTestFunc nnoremap at :GoTest nnoremap s :GoAlternate nnoremap d :GoDecls nnoremap ad :GoDeclsDir nnoremap ld :GoDefStack nnoremap bd :GoDefPop nnoremap i :GoInfo nnoremap rr :GoReferrers nnoremap u :GoCallees Plug 'majutsushi/tagbar' nnoremap tb :TagbarToggle Plug 'tpope/vim-rails' "Plug 'NLKNguyen/papercolor-theme' Plug 'morhetz/gruvbox' " gitk in vim basically Plug 'cohama/agit.vim' Plug 'jeetsukumaran/vim-buffergator' " Use the right side of the screen let g:buffergator_viewport_split_policy = 'R' " I want my own keymappings... let g:buffergator_suppress_keymaps = 1 " Looper buffers "let g:buffergator_mru_cycle_loop = 1 " Go to the previous buffer open nmap jj :BuffergatorMruCyclePrev " Go to the next buffer open nmap kk :BuffergatorMruCycleNext " View the entire list of buffers open nmap bl :BuffergatorOpen " Asynchronous Lint Engine Plug 'w0rp/ale' " Unixy stuff Plug 'tpope/vim-eunuch' Plug 'ziglang/zig.vim' call plug#end() filetype plugin indent on set rtp+=$GOROOT/misc/vim syntax enable set encoding=utf-8 set showcmd set pastetoggle= " leave paste mode so i don't forget au InsertLeave * set nopaste " whitespace set wrap " don't wrap lines set textwidth=79 set formatoptions=qrn1 set tabstop=2 shiftwidth=2 " a tab is two spaces (or set this to 4) set expandtab " use spaces, not tabs (optional) set backspace=indent,eol,start " backspace through everything in insert mode set lazyredraw " don't update the screen when executing macros set completeopt-=preview " hide the Scratch window when autocompleting " searching set hlsearch " highlight matches set incsearch " incremental searching set ignorecase " searches are case insensitive... set smartcase " ... unless they contain at least one capital letter set gdefault set showmatch " Show matching brackets. set matchtime=5 " Bracket blinking. set novisualbell " No blinking set noerrorbells " No noise. set laststatus=2 " Always show status line. set vb t_vb= " disable any beeps or flashes on error set ruler set showcmd " Display an incomplete command in the lower right corner of the Vim window set shortmess=atI " Shortens messages set nolist " Display unprintable characters f12 - switches set listchars=tab:·\ ,eol:¶,trail:·,extends:»,precedes:« " Unprintable chars mapping set foldenable " Turn on folding set foldmethod=marker " Fold on the marker set foldlevel=100 " Don't autofold anything (but I can still fold manually) set foldopen=block,hor,mark,percent,quickfix,tag " what movements open folds " start scrolling when we're 8 lines away from margins set scrolloff=8 set sidescrolloff=15 set sidescroll=1 set noswapfile set nobackup set nowb set hidden " Automatically insert the current comment leader after hitting 'o' or 'O' in Normal mode. set fo+=o " Do not automatically insert a comment leader after an enter set fo-=r " Do no auto-wrap text using textwidth (does not apply to comments) set fo-=t set mouse=a " make mouse work in st set ttymouse=xterm2 set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*/vendor/*,*/bin/*,*/node_modules/* " quicker update time for things like tagbar and coc set updatetime=300 " taller vertical bar for vsplits set fillchars+=vert:│ " company standard bleh autocmd FileType java setlocal shiftwidth=4 tabstop=4 autocmd FileType go setlocal noexpandtab autocmd BufNewFile,BufRead *.shl set syntax=sh " When opening a file, always jump to the last cursor position autocmd BufReadPost * \ if line("'\"") > 0 && line ("'\"") <= line("$") | \ exe "normal g'\"" | \ endif " easily copy to system clipboard vnoremap "+y " remove annoying help window inoremap nnoremap vnoremap " easy .vimrc editing nnoremap rs :source ~/.vimrc nnoremap rt :tabnew ~/.vimrc " better window navigation nnoremap j nnoremap k nnoremap h nnoremap l " quickfix nnoremap :cnext nnoremap :cprevious " hulk smash escape inoremap jk inoremap kj " buffer switching noremap :bp noremap :bn " unhighlight search results noremap / :nohls noremap x :%!xmllint --format - " reselect visual block after indent/outdent vnoremap < >gv " force saving files that require root permission cmap w!! %!sudo tee > /dev/null % " Close the current buffer and move to the previous one " This replicates the idea of closing a tab nmap bq :bp bd # "autocmd vimenter * ++nested colorscheme gruvbox set termguicolors let g:gruvbox_italic=1 colorscheme gruvbox if &t_Co >= 256 || has('gui-running') set background=dark endif set nu if version >= 703 set undodir=~/.vim/backups set undofile set relativenumber endif highlight clear SignColumn set t_ku=OA set t_kd=OB set t_kr=OC set t_kl=OD