"Fark all from https://jamesdixon.dev/posts/a-minimal-vimrc/ set nocompatible if filereadable(expand('$VIMRUNTIME/defaults.vim')) unlet! g:skip_defaults_vim source $VIMRUNTIME/defaults.vim endif " " " leader let maplocalleader = "\\" let mapleader = "," " encryption method when using :X set cm=blowfish2 " Source this file again. noremap rc :source ~/.vim/vimrc " " Underline the current line, based on its length. noremap ul mmyypVr-`m " " Show the 'list' characters. noremap ls :set list! " " Remove double- or single-quotes, or graves wrapped around a string. noremap rdq mmF"xf"x`m noremap rsq mmF'xf'x`m noremap rg mmF`xf`x`m " Jump up or down by 10 lines. noremap J 10j noremap K 10k " Place timestamps, be it date (YYYY-MM-DD) or time (HH:MM:SS). if (exists("*strftime")) noremap date "=strftime("%F")p9h noremap time "=strftime("%X")p7h endif " " Execute the current line with BASH. noremap rl :.w !bash " Run the current file with PERL, Python, BASH, or a Bourne Shell derivative. noremap rpl :!clear; perl % noremap rpy :!clear; python % noremap rb :!clear; bash % noremap rs :!clear; sh % " Disable arrow keys for normal mode. noremap noremap noremap noremap " Disable arrow keys for insert mode. inoremap inoremap inoremap inoremap " Disable arrow keys for visual mode. vnoremap vnoremap vnoremap vnoremap " Disable arrow keys for command mode. cnoremap cnoremap cnoremap cnoremap " this needs to be here when using vim native package manager: " https://github.com/dracula/vim/issues/161 "packadd! dracula | colorscheme dracula " ignore wrapping. you can move to the visual start of end of a line with `g0` " and `g$`, respectively. noremap j gj noremap k gk " " These do strange things to centering of text, etc. "set sidescrolloff=999 "set scrolloff=999 set shell=/bin/sh set hi=500 set novisualbell set nonumber "show line numbers set wildmenu "enable a menu that shows tab completion options in the status bar set wildchar= 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 set t_Co=256 "set t_Co=0 - switches off all colours set path+=** set more set colorcolumn=0 set equalalways set showmode set nobackup set listchars=tab:»→,trail:␣ set grepprg=/usr/local/bin/ag " i don't bother with folding, but it's here if i need it. if has('folding') set foldmethod=marker set foldmarker=#\ {{{,#\ }}} set viewoptions=folds,options,cursor,unix,slash endif " from https://www.reddit.com/r/vim/comments/f5gi2g/vim_notetaking_automatic_link_creation_between/ " copies a link from file from previous buffer for pasting into " next buffer with "ap function! s:copy_filename_as_mdlink() let fname=expand("%") let @a="[" . fname . "](./" . fname. ")" endfunction autocmd BufLeave * call s:copy_filename_as_mdlink() " vim-plug call plug#begin('~/.vim/plugged') Plug 'morhetz/gruvbox' Plug 'alok/notational-fzf-vim' Plug 'sheerun/vim-polyglot' "Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'tpope/vim-commentary' Plug 'davidhalter/jedi' 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 'altercation/vim-colors-solarized' Plug 'junegunn/fzf.vim' Plug 'SirVer/Ultisnips' Plug 'honza/vim-snippets' Plug 'pangloss/vim-javascript' Plug 'fatih/vim-go', { 'tag': '*' } Plug 'powerman/vim-plugin-AnsiEsc' "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' " notational-fzf-vim let g:nv_search_paths = ['~/Notes', '~/Notes/Archive'] " jedo-vim let g:jedi#goto_command = "d" let g:jedi#goto_assignments_command = "g" let g:jedi#goto_stubs_command = "s" let g:jedi#goto_definitions_command = "" let g:jedi#documentation_command = "K" let g:jedi#usages_command = "n" let g:jedi#completions_command = "" let g:jedi#rename_command = "r" " test 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 = 1 let g:ale_set_signs = 1 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 " this stuff from https://github.com/morhetz/gruvbox/wiki/Terminal-specific "Use e 24-bit (true-color) mode in Vim/Neovim when outside tmux. "If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support "(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.) if (empty($TMUX)) if (has("nvim")) "For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > let $NVIM_TUI_ENABLE_TRUE_COLOR=1 endif "For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 > "Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd > " < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 > if (has("termguicolors")) set termguicolors endif endif syntax enable let g:solarized_termcolors=256 let g:gruvbox_termcolors=256 let g:gruvbox_contrast_dark='hard' let g:gruvbox_contrast_light='hard' let g:gruvbox_hls_cursor='orange' let g:gruvbox_sign_column='bg0' let g:gruvbox_number_column='bg0' let g:gruvbox_invert_signs='0' let g:gruvbox_improved_strings='0' set background=dark colorscheme industry "colorscheme delek " " manual highlights " highlight Visual ctermfg=black ctermbg=LightMagenta " highlight SignColumn ctermbg=black ctermfg=white " highlight Comment ctermfg=DarkGray " highlight DiffAdd term=bold ctermfg=yellow ctermbg=black " highlight DiffDelete term=bold ctermfg=red ctermbg=black " highlight DiffChange term=bold ctermfg=black ctermbg=DarkGreen 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