diff options
author | Matthew Lemon <matt@matthewlemon.com> | 2022-10-05 16:33:10 +0100 |
---|---|---|
committer | Matthew Lemon <matt@matthewlemon.com> | 2022-10-05 16:33:10 +0100 |
commit | 9fff448654308b1e1b3d1129c0255544f56c25cc (patch) | |
tree | eda78717611d7a6b2204ba8e9f73af90e69ae90b /vim/vimrc |
initial
Diffstat (limited to '')
-rw-r--r-- | vim/vimrc | 493 |
1 files changed, 493 insertions, 0 deletions
diff --git a/vim/vimrc b/vim/vimrc new file mode 100644 index 0000000..786ad79 --- /dev/null +++ b/vim/vimrc @@ -0,0 +1,493 @@ +"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 <silent> <localleader>rc :source ~/.vim/vimrc<CR> +" +" Underline the current line, based on its length. +noremap <silent> <leader>ul mmyypVr-<Esc>`m +" +" Show the 'list' characters. +noremap <silent> <leader>ls :set list!<CR> +" +" Remove double- or single-quotes, or graves wrapped around a string. +noremap <silent> <leader>rdq mmF"xf"x`m +noremap <silent> <leader>rsq mmF'xf'x`m +noremap <silent> <leader>rg mmF`xf`x`m + +" Jump up or down by 10 lines. +noremap <silent> J 10j +noremap <silent> K 10k + + +" Place timestamps, be it date (YYYY-MM-DD) or time (HH:MM:SS). +if (exists("*strftime")) + noremap <silent> <leader>date "=strftime("%F")<CR>p9h + noremap <silent> <leader>time "=strftime("%X")<CR>p7h +endif +" +" Execute the current line with BASH. +noremap <silent> <leader>rl :.w !bash<CR> + +" Run the current file with PERL, Python, BASH, or a Bourne Shell derivative. +noremap <silent> <leader>rpl :!clear; perl %<CR> +noremap <silent> <leader>rpy :!clear; python %<CR> +noremap <silent> <leader>rb :!clear; bash %<CR> +noremap <silent> <leader>rs :!clear; sh %<CR> + +" Disable arrow keys for normal mode. +noremap <up> <Nop> +noremap <down> <Nop> +noremap <left> <Nop> +noremap <right> <Nop> + +" Disable arrow keys for insert mode. +inoremap <up> <Nop> +inoremap <down> <Nop> +inoremap <left> <Nop> +inoremap <right> <Nop> + +" Disable arrow keys for visual mode. +vnoremap <up> <Nop> +vnoremap <down> <Nop> +vnoremap <left> <Nop> +vnoremap <right> <Nop> + +" Disable arrow keys for command mode. +cnoremap <up> <Nop> +cnoremap <down> <Nop> +cnoremap <left> <Nop> +cnoremap <right> <Nop> + +" 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=<TAB> +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 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 'ledger/vim-ledger' +"Plug 'prabirshrestha/vim-lsp' +Plug 'ledger/vim-ledger' +"Plug 'alok/notational-fzf-vim' +Plug 'sheerun/vim-polyglot' +"Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'tpope/vim-commentary' +Plug 'godlygeek/tabular' +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 = "<leader>d" +let g:jedi#goto_assignments_command = "<leader>g" +let g:jedi#goto_stubs_command = "<leader>s" +let g:jedi#goto_definitions_command = "" +let g:jedi#documentation_command = "K" +let g:jedi#usages_command = "<leader>n" +let g:jedi#completions_command = "<C-Space>" +let g:jedi#rename_command = "<leader>r" + +" test +nmap <silent> t<C-n> :TestNearest<CR> +nmap <silent> t<C-f> :TestFile<CR> +nmap <silent> t<C-s> :TestSuite<CR> +"nmap <silent> t<C-l> :TestLast<CR> +nmap <silent> <S-F10> :TestLast<CR> +nmap <silent> t<C-g> :TestVisit<CR> + +" 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 <silent> [g <Plug>(coc-diagnostic-prev) +" nmap <silent> ]g <Plug>(coc-diagnostic-next) + +" " CoC GoTo code navigation. +" nmap <silent> gd <Plug>(coc-definition) +" nmap <silent> gy <Plug>(coc-type-definition) +" nmap <silent> gi <Plug>(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 <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 +" +"" Quick Editing vimrc +nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $MYVIMRC<cr> + +" Highlight the symbol and its references when holding the cursor. +" autocmd CursorHold * silent call CocActionAsync('highlight') + +" clear search highlights +nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> + +" previews in netrw +let g:netrw_preview = 1 + +" journal stuff +autocmd BufNewFile,BufReadPost *.md map <leader>jj <Esc>:r! date +" - \%H:\%M: "<ENTER>kJA<Esc>$<space><Esc> +autocmd BufNewFile,BufReadPost *.md map <leader>jd <Esc>:r! date +"(\%Y-\%m-\%dT\%H:\%M)"<ENTER>i<backspace><space><Esc> + +" 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 <leader>r :w<CR>:split <bar> terminal go run %<CR> +autocmd FileType go nmap <leader>R :GoRun<CR> +" 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 <leader>ga <Plug>(go-alternate-edit) +au Filetype go nmap <leader>gah <Plug>(go-alternate-split) +au Filetype go nmap <leader>gav <Plug>(go-alternate-vertical) +au FileType go nmap <F8> :GoTestFunc -short<cr> +au FileType go nmap <F10> :GoTest -short<cr> +au FileType go nmap <F9> :DlvToggleBreakpoint<CR> +au FileType go nmap <S-F9> :DlvTest<CR> +au FileType go nmap <F11> :DlvDebug<CR> +au FileType go nmap <S-F5> :GoRename<CR> + +" 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 <C-s> :GFiles!<CR> + nnoremap <leader><C-p> :<C-u>FZF!<CR> + nnoremap <leader>t :Files<CR> + nnoremap <leader>o :Tags<CR> + nnoremap <leader>h :History<CR> + nnoremap <silent> <leader>0 :Files<CR> + nnoremap <silent> <leader>; :BLines<CR> + nnoremap <silent> <leader>l :Lines<CR> + nnoremap <silent> <leader>o :BTags<CR> + nnoremap <silent> <leader>bu :Buffers<CR> + nnoremap <silent> <leader>? :History:<CR> + nnoremap <silent> <leader>/ :execute 'Ag ' . input('Ag/')<CR> + nnoremap <silent> <leader>P :call SearchWordWithAg()<CR> + vnoremap <silent> <leader>P :call SearchVisualSelectionWithAg()<CR> + nnoremap <silent> <leader>ft :Filetypes<CR> + nnoremap <silent> <leader>CC :Commands<CR> + imap <C-x><C-f> <plug>(fzf-complete-file-ag) + imap <C-x><C-l> <plug>(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(<q-args>), 1, + \ <bang>0 ? fzf#vim#with_preview('up:60%') + \ : fzf#vim#with_preview('right:50%:hidden', '?'), + \ <bang>0) + +nnoremap <C-p>a :Rg + +"" Quick Editing vimrc +nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $MYVIMRC<cr> + +" 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 gruvbox +"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 <F7> :if exists("g:syntax_on") <Bar> +\ syntax off <Bar> +\ else <Bar> +\ syntax enable <Bar> +\ endif <CR> + +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 <leader>r <esc>:'<,'>:w !python3<CR> + 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 |