Last active
January 12, 2023 16:23
-
-
Save andrewmeissner/65c4b4078e9b18f7bb33367e94753cbf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Install vim-plug if not found | |
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 | |
endif | |
" Run PlugInstall if there are missing plugins | |
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) | |
\| PlugInstall --sync | source $MYVIMRC | |
\| endif | |
call plug#begin('~/.vim/bundles') | |
Plug 'junegunn/vim-plug' | |
Plug 'preservim/nerdtree' | |
Plug 'fatih/vim-go' | |
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} | |
Plug 'fatih/molokai' | |
Plug 'ctrlpvim/ctrlp.vim' | |
Plug 'diepm/vim-rest-console' | |
Plug 'sebdah/vim-delve' | |
call plug#end() | |
"""""""""""""""""""""" | |
" Settings " | |
"""""""""""""""""""""" | |
set mouse=a | |
set nocompatible " Enables us Vim specific features | |
filetype off " Reset filetype detection first ... | |
filetype plugin indent on " ... and enable filetype detection | |
set ttyfast " Indicate fast terminal conn for faster redraw | |
set ttymouse=xterm2 " Indicate terminal type for mouse codes | |
set ttyscroll=3 " Speedup scrolling | |
set laststatus=2 " Show status line always | |
set encoding=utf-8 " Set default encoding to UTF-8 | |
set autoread " Automatically read changed files | |
set autoindent " Enabile Autoindent | |
set backspace=indent,eol,start " Makes backspace key more powerful. | |
set incsearch " Shows the match while typing | |
set hlsearch " Highlight found searches | |
set noerrorbells " No beeps | |
set number " Show line numbers | |
set showcmd " Show me what I'm typing | |
set noswapfile " Don't use swapfile | |
set nobackup " Don't create annoying backup files | |
set splitright " Vertical windows should be split to right | |
set splitbelow " Horizontal windows should split to bottom | |
set autowrite " Automatically save before :next, :make etc. | |
set hidden " Buffer should still exist if window is closed | |
set fileformats=unix,dos,mac " Prefer Unix over Windows over OS 9 formats | |
set noshowmatch " Do not show matching brackets by flickering | |
set noshowmode " We show the mode with airline or lightline | |
set ignorecase " Search case insensitive... | |
set smartcase " ... but not it begins with upper case | |
set completeopt=menu,menuone " Show popup menu, even if there is one entry | |
set pumheight=10 " Completion window max size | |
set nocursorcolumn " Do not highlight column (speeds up highlighting) | |
set nocursorline " Do not highlight cursor (speeds up highlighting) | |
set lazyredraw " Wait to redraw | |
" Enable to copy to clipboard for operations like yank, delete, change and put | |
" http://stackoverflow.com/questions/20186975/vim-mac-how-to-copy-to-clipboard-without-pbcopy | |
if has('unnamedplus') | |
set clipboard^=unnamed | |
set clipboard^=unnamedplus | |
endif | |
" This enables us to undo files even if you exit Vim. | |
if has('persistent_undo') | |
set undofile | |
set undodir=~/.config/vim/tmp/undo// | |
endif | |
" Colorscheme | |
syntax enable | |
set t_Co=256 | |
let g:rehash256 = 1 | |
let g:molokai_original = 1 | |
colorscheme molokai | |
"""""""""""""""""""""" | |
" Mappings " | |
"""""""""""""""""""""" | |
" Set leader shortcut to a comma ','. By default it's the backslash | |
let mapleader = "," | |
" Jump to next error with Ctrl-n and previous error with Ctrl-m. Close the | |
" quickfix window with <leader>a | |
map <C-n> :cnext<CR> | |
map <C-m> :cprevious<CR> | |
nnoremap <leader>a :cclose<CR> | |
" Visual linewise up and down by default (and use gj gk to go quicker) | |
noremap <Up> gk | |
noremap <Down> gj | |
noremap j gj | |
noremap k gk | |
" Search mappings: These will make it so that going to the next one in a | |
" search will center on the line it's found in. | |
nnoremap n nzzzv | |
nnoremap N Nzzzv | |
" Act like D and C | |
nnoremap Y y$ | |
" Enter automatically into the files directory | |
autocmd BufEnter * silent! lcd %:p:h | |
""""""""""""""""""""" | |
" Plugins " | |
""""""""""""""""""""" | |
" vim-go | |
let g:go_fmt_command = "goimports" | |
let g:go_fmt_options = {"goimports": "-local \"cs,go.crwd.dev,github.com/CrowdStrike\""} | |
let g:go_autodetect_gopath = 1 | |
let g:go_list_type = "quickfix" | |
let g:go_highlight_types = 1 | |
let g:go_highlight_fields = 1 | |
let g:go_highlight_functions = 1 | |
let g:go_highlight_function_calls = 1 | |
let g:go_highlight_extra_types = 1 | |
let g:go_highlight_generate_tags = 1 | |
" Open :GoDeclsDir with ctrl-g | |
nmap <C-g> :GoDeclsDir<cr> | |
imap <C-g> <esc>:<C-u>GoDeclsDir<cr> | |
augroup go | |
autocmd! | |
" Show by default 4 spaces for a tab | |
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4 | |
" :GoBuild and :GoTestCompile | |
autocmd FileType go nmap <leader>b :<C-u>call <SID>build_go_files()<CR> | |
" :GoTest | |
autocmd FileType go nmap <leader>t <Plug>(go-test) | |
" :GoRun | |
autocmd FileType go nmap <leader>r <Plug>(go-run) | |
" :GoDoc | |
autocmd FileType go nmap <Leader>d <Plug>(go-doc) | |
" :GoCoverageToggle | |
autocmd FileType go nmap <Leader>c <Plug>(go-coverage-toggle) | |
" :GoInfo | |
autocmd FileType go nmap <Leader>i <Plug>(go-info) | |
" :GoMetaLinter | |
autocmd FileType go nmap <Leader>l <Plug>(go-metalinter) | |
" :GoDef but opens in a vertical split | |
autocmd FileType go nmap <Leader>v <Plug>(go-def-vertical) | |
" :GoDef but opens in a horizontal split | |
autocmd FileType go nmap <Leader>s <Plug>(go-def-split) | |
" :GoAlternate commands :A, :AV, :AS and :AT | |
autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit') | |
autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit') | |
autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split') | |
autocmd Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe') | |
augroup END | |
" build_go_files is a custom function that builds or compiles the test file. | |
" It calls :GoBuild if its a Go file, or :GoTestCompile if it's a test file | |
function! s:build_go_files() | |
let l:file = expand('%') | |
if l:file =~# '^\f\+_test\.go$' | |
call go#test#Test(0, 1) | |
elseif l:file =~# '^\f\+\.go$' | |
call go#cmd#Build(0) | |
endif | |
endfunction | |
" Start NERDTree. If a file is specified, move the cursor to its window. | |
autocmd StdinReadPre * let s:std_in=1 | |
autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif | |
" Exit Vim if NERDTree is the only window remaining in the only tab. | |
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif | |
" Allows NERDTree to show the hidden files | |
let NERDTreeShowHidden=1 | |
" ------------------------------------------------------------------------------------------------- | |
" coc.nvim default settings | |
" ------------------------------------------------------------------------------------------------- | |
" if hidden is not set, TextEdit might fail. | |
set hidden | |
" Better display for messages | |
set cmdheight=2 | |
" Smaller updatetime for CursorHold & CursorHoldI | |
set updatetime=300 | |
" don't give |ins-completion-menu| messages. | |
set shortmess+=c | |
" always show signcolumns | |
set signcolumn=yes | |
" Use tab for trigger completion with characters ahead and navigate. | |
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. | |
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. | |
inoremap <silent><expr> <c-space> coc#refresh() | |
" Use `[c` and `]c` to navigate diagnostics | |
nmap <silent> [c <Plug>(coc-diagnostic-prev) | |
nmap <silent> ]c <Plug>(coc-diagnostic-next) | |
" Remap keys for gotos | |
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 U to show documentation in preview window | |
nnoremap <silent> U :call <SID>show_documentation()<CR> | |
" Remap for rename current word | |
nmap <leader>rn <Plug>(coc-rename) | |
" Remap for format selected region | |
vmap <leader>f <Plug>(coc-format-selected) | |
nmap <leader>f <Plug>(coc-format-selected) | |
" Show all diagnostics | |
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> | |
" Manage extensions | |
nnoremap <silent> <space>e :<C-u>CocList extensions<cr> | |
" Show commands | |
nnoremap <silent> <space>c :<C-u>CocList commands<cr> | |
" Find symbol of current document | |
nnoremap <silent> <space>o :<C-u>CocList outline<cr> | |
" Search workspace symbols | |
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> | |
" Do default action for next item. | |
nnoremap <silent> <space>j :<C-u>CocNext<CR> | |
" Do default action for previous item. | |
nnoremap <silent> <space>k :<C-u>CocPrev<CR> | |
" Resume latest coc list | |
nnoremap <silent> <space>p :<C-u>CocListResume<CR> | |
" disable vim-go :GoDef short cut (gd) | |
" this is handled by LanguageClient [LC] | |
let g:go_def_mapping_enabled = 0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment