" from https://jamesdixon.dev/posts/a-minimal-vimrc/ if filereadable(expand('$VIMRUNTIME/defaults.vim')) unlet! g:skip_defaults_vim source $VIMRUNTIME/defaults.vim endif " " leader let maplocalleader = "\\" let mapleader = "," " this needs to be here when using vim native package manager: " https://github.com/dracula/vim/issues/161 "packadd! dracula | colorscheme dracula " leader let maplocalleader = "\\" let mapleader = "," set novisualbell set nonumber "show line numbers set wildmenu "enable a menu that shows tab completion options in the status bar set showmatch "highlights matching brackets on cursor hover set ruler "show cursor position in status bar set showcmd "shows the normal mode command before it gets executed set encoding=utf-8 set fileformats=unix,dos,mac set nohlsearch "highlights searches set incsearch "incremental search (searches character by character) set ignorecase "ignores the case of a search set smartcase "only ignores case if there are no capital letters in search (only works after ignorecase has been set) set tabstop=4 "the amount of spaces that vim will equate to a tab character set softtabstop=4 "like tabstop, but for editing operations (insert mode) set splitbelow " split horiz below set noswapfile set splitright " split new to the right when doing vertical set shiftwidth=4 "used for autoindent and << and >> operators in normal mode set autoindent "copies indent from current line to the next line set expandtab "tabs will expand to whitespace characters set esckeys "allows function keys to be recognized in Insert mode set ttimeoutlen=20 "timeout for a key code mapping set timeoutlen=1000 "time(ms) to wait for key mappings set hidden set number " vim-plug call plug#begin('~/.vim/plugged') Plug 'morhetz/gruvbox' Plug 'sheerun/vim-polyglot' Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'tpope/vim-commentary' Plug 'tpope/vim-dispatch' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-sensible' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-surround' Plug 'dense-analysis/ale' Plug 'vim-test/vim-test' Plug 'jlanzarotta/bufexplorer' Plug 'preservim/nerdtree' Plug 'mhinz/vim-signify' Plug 'mattn/emmet-vim' Plug 'junegunn/fzf' Plug 'junegunn/fzf.vim' Plug 'SirVer/Ultisnips' Plug 'honza/vim-snippets' Plug 'pangloss/vim-javascript' Plug 'fatih/vim-go', { 'tag': '*' } Plug 'altercation/vim-colors-solarized' Plug 'vimwiki/vimwiki' Plug 'tools-life/taskwiki' Plug 'powerman/vim-plugin-AnsiEsc' Plug 'farseer90718/vim-taskwarrior' Plug 'majutsushi/tagbar' call plug#end() " vim-test " use vim-dispatch to run tests in the quickfix window " from Modern Vim Ch.4 " the mappings below are from vim-test " https://github.com/vim-test/vim-test " dispatch opens send test output to quickfix window " let test#strategy = "vimterminal" let test#strategy = "basic" let test#python#runner = "pytest" let test#vim#term_position = "topleft 10" " let test#python#pytest#options = '-vvv --tb=short' let test#python#pytest#options = '--tb=short' let test#go#runner = 'gotest' "let test#go#gotest#options = '-v' " To run mypy using vim-dispath -with Dispatch autocmd FileType python let b:dispatch = 'mypy --ignore-missing-imports' nmap t :TestNearest nmap t :TestFile nmap t :TestSuite "nmap t :TestLast nmap :TestLast nmap t :TestVisit " CoC extensions let g:coc_global_extensions = ['coc-tsserver', 'coc-pyright', 'coc-html'] " Coc Use `[g` and `]g` to navigate diagnostics " Coc Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. nmap [g (coc-diagnostic-prev) nmap ]g (coc-diagnostic-next) " CoC GoTo code navigation. nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) " " ALE ale config let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_sign_error = '✘' let g:ale_sign_warning = '⚠' let g:ale_lint_on_text_changed = 'never' let g:ale_hover_cursor = 1 let g:ale_enabled = 1 let g:ale_sign_column_always = 1 let g:ale_open_list = 0 let g:ale_set_highlights = 0 let g:ale_set_signs = 0 let g:ale_set_loclist = 1 let g:ale_set_quickfix = 0 let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_format = '%linter% - %code: %%s' let g:ale_loclist_msg_format = '%linter% - %code: %%s' let g:ale_echo_msg_warning_str = 'Warning' let g:ale_linters = {'python': ['flake8', 'mypy'], \ 'ocaml': ['merlin'], \ 'cpp': ['clang'], \ 'yaml': ['yamllint'], \ 'c': ['clang'], \ 'go': ['gopls', 'golint', 'gofmt'], \} let g:ale_fixers = { \ 'python': ['isort', 'yapf', 'black'], \ 'go': ['gofmt'], \ 'rust': ['rustfmt'] \ } let g:ale_python_mypy_ignore_invalid_syntax = 1 let g:ale_python_mypy_executable = 'mypy' let g:ale_python_mypy_options = '--config-file mypy.ini' " let g:ale_sign_error = '>>' let g:ale_fix_on_save = 1 let g:ale_linters_explicit = 0 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 " "" Quick Editing vimrc nnoremap ev sjL:e $MYVIMRC " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " clear search highlights nnoremap :noh:call clearmatches() " previews in netrw let g:netrw_preview = 1 " journal stuff autocmd BufNewFile,BufReadPost *.md map jj :r! date +" - \%H:\%M: "kJA$ autocmd BufNewFile,BufReadPost *.md map jd :r! date +"(\%Y-\%m-\%dT\%H:\%M)"i " switch off Coc with Markdown autocmd FileType markdown let b:coc_suggest_disable = 1 "syntax on "turn syntax highlighting on filetype plugin indent on "load plugin and indent files associated a detected filetype runtime macros/matchit.vim "allows jumping between brackets with % in normal mode " Go stuff 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_operators = 1 let g:go_doc_keywordprg_enabled = 1 let g:go_list_height = 0 let g:go_highlight_operators = 1 let g:go_highlight_function_parameters = 1 let g:go_doc_max_height = 50 let g:go_doc_popup_window = 1 let g:go_list_height = 10 " vim-go debugger window settings let g:go_debug_windows = { \ 'vars': 'leftabove 40vnew', \ 'stack': 'leftabove 20new', \ 'goroutines': 'botright 10new', \ 'out': 'botright 5new', \ } " vim-go and gopls let g:go_def_mode='gopls' let g:go_info_mode='gopls' let g:go_play_browser_command = 'firefox %URL% &' let g:go_test_show_name = 1 let g:go_auto_type_info = 1 let test#go#runner = 'gotest' let g:go_term_mode = "split" let g:go_term_height = 50 let g:go_highlight_fields = 1 let g:go_highlight_functions = 1 "autocmd FileType go nmap r :w:split terminal go run % autocmd FileType go nmap R :GoRun " highlights the variable in the file for you.. "let g:go_auto_sameids = 1 " auto import... let g:go_fmt_command = "goimports" " automatic type info on cursor let g:go_auto_type_info = 1 let g:go_snippet_engine = "ultisnips" au Filetype go nmap ga (go-alternate-edit) au Filetype go nmap gah (go-alternate-split) au Filetype go nmap gav (go-alternate-vertical) au FileType go nmap :GoTestFunc -short au FileType go nmap :GoTest -short au FileType go nmap :DlvToggleBreakpoint au FileType go nmap :DlvTest au FileType go nmap :DlvDebug au FileType go nmap :GoRename " FZF " This is the default extra key bindings let g:fzf_action = { \ 'ctrl-t': 'tab split', \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' } " - FZF Popup window (center of the screen) let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } " Customize fzf colors to match your color scheme let g:fzf_colors = \ { 'fg': ['fg', '#f8f8f2'], \ 'bg': ['bg', '#282a36'], \ 'hl': ['fg', '#bd93f9'], \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], \ 'hl+': ['fg', 'Statement'], \ 'info': ['fg', '#ffb86c'], \ 'prompt': ['fg', '#50fa7b'], \ 'pointer': ['fg', 'Exception'], \ 'marker': ['fg', 'Keyword'], \ 'spinner': ['fg', '#ffb86c'], \ 'header': ['fg', '#6272a4'] } " More fzf settings " (https://github.com/zenbro/dotfiles/blob/master/.nvimrc#L151-L187) let g:fzf_nvim_statusline = 0 " disable statusline overwriting " command history is :History: nnoremap :GFiles! nnoremap :FZF! nnoremap t :Files nnoremap o :Tags nnoremap h :History nnoremap 0 :Files nnoremap ; :BLines nnoremap l :Lines nnoremap o :BTags nnoremap bu :Buffers nnoremap ? :History: nnoremap / :execute 'Ag ' . input('Ag/') nnoremap P :call SearchWordWithAg() vnoremap P :call SearchVisualSelectionWithAg() nnoremap ft :Filetypes nnoremap CC :Commands imap (fzf-complete-file-ag) imap (fzf-complete-line) " Search with ripgrep command! -bang -nargs=* Rg \ call fzf#vim#grep( \ 'rg --column --line-number --no-heading --color=always --ignore-case '.shellescape(), 1, \ 0 ? fzf#vim#with_preview('up:60%') \ : fzf#vim#with_preview('right:50%:hidden', '?'), \ 0) nnoremap a :Rg "" Quick Editing vimrc nnoremap ev sjL:e $MYVIMRC " dracula (must be set before colorscheme) let g:dracula_colorterm = 0 let g:dracula_bold = 1 let g:dracula_italic = 0 " this has to be set to 0 to avoid lots of erroneous highlighting (https://github.com/dracula/vim/issues/219) let g:dracula_underline = 1 " Colorscheme "colorscheme dracula "colorscheme elflord let g:gruvbox_contrast_dark = 'hard' set background=dark colorscheme gruvbox map :if exists("g:syntax_on") \ syntax off \ else \ syntax enable \ endif augroup general autocmd! "keep equal proportions when windows resized autocmd VimResized * wincmd = "save cursor position in a file autocmd BufReadPost * if line("'\"") > 1 && line("'\"") \ <= line("$") | exe "normal! g'\"" | endif augroup END augroup languages autocmd! autocmd BufNewFile,BufRead *.bash set syntax=sh autocmd FileType python xnoremap r :'<,'>:w !python3 autocmd FileType go set noexpandtab autocmd FileType html :syntax sync fromstart autocmd FileType html,javascript,css,json,yaml,sh \ setlocal ts=2 sts=2 sw=2 expandtab augroup ENDj hi Search cterm=NONE ctermfg=black ctermbg=blue hi Visual cterm=NONE ctermfg=black ctermbg=blue