diff options
author | Matthew Lemon <chaffinach+git@protonmail.ch> | 2022-04-19 16:17:36 +0100 |
---|---|---|
committer | Matthew Lemon <chaffinach+git@protonmail.ch> | 2022-04-19 16:17:36 +0100 |
commit | 6cc4ed44830a62b7f43870dae3fb2540687671b0 (patch) | |
tree | 64458425a1129730f3cc6c3ac2f334b8d281d5bc /vim/vimrc | |
parent | 44e8e526f4faeb5a3caaf7e44f94013567ac217d (diff) |
big update - profile, vim - newsboat, ignore bash taskrc
Diffstat (limited to '')
-rw-r--r-- | vim/vimrc | 503 |
1 files changed, 294 insertions, 209 deletions
@@ -1,81 +1,70 @@ -" New vimrc! Jan 2020 +" from https://jamesdixon.dev/posts/a-minimal-vimrc/ + +if filereadable(expand('$VIMRUNTIME/defaults.vim')) + unlet! g:skip_defaults_vim + source $VIMRUNTIME/defaults.vim +endif " -" We want to load this first - everything else I include overrides it -runtime! plugin/sensible.vim - -" try to speed vim on openbsd -" https://www.reddit.com/r/openbsd/comments/9t3t4q/vim_81_slow_on_openbsd/ -let sh_minlines=100 -let sh_maxlines=600 -set belloff=all -set synmaxcol=300 -set noshowmatch -set synmaxcol=200 -set shell=/bin/ksh - -set nocompatible - -set cmdheight=1 -set re=1 "" Fuck - this does speed up vim a bit https://stackoverflow.com/questions/19030290/syntax-highlighting-causes-terrible-lag-in-vim -set foldmethod=manual -set encoding=utf-8 -set modelines=0 -" set relativenumber ! might slow down vim -set autoindent -set showmode -set nocursorline -set ttyfast -"set ttimeout -set notimeout -set nottimeout -set backspace=indent,eol,start -set laststatus=2 -set history=1000 " remember more commands and search history -set undolevels=1000 " use many muchos levels of undo -set wildignore=*.swp,*.bak,*.pyc,*.class -set visualbell " don't beep -set noerrorbells " don't beep -set number -set fillchars=diff:⣿,vert:\| -set ruler " show the cursor position all the time -set showcmd " display incomplete commands -set vb -"set list -set listchars=tab:▸\ ,eol:¬,extends:❯,precedes:❮ -set lazyredraw -set matchtime=3 -set showbreak=↪ -set splitbelow -set splitright -set autowrite -set linebreak -set fileencodings=utf-8 -set path+=** - -" Searching and movement ... -nnoremap / /\v -vnoremap / /\v -set ignorecase -set smartcase -set incsearch -set showmatch -set hlsearch -set gdefault -set scrolloff=3 -set sidescroll=1 -set sidescrolloff=10 -set virtualedit+=block -nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> +" leader +let maplocalleader = "\\" +let mapleader = "," -" calcurse -" markdown notes from https://www.youtube.com/watch?v=I_-MqgpEWFA -autocmd BufRead,BufNewFile /tmp/calcurse*,~/.calcurse/notes/* set filetype=markdown +" this needs to be here when using vim native package manager: +" https://github.com/dracula/vim/issues/161 +"packadd! dracula | colorscheme dracula -" open a Quickfix window for the last search -nnoremap <silent> <leader>/ :execute 'vimgrep /'.@/.'/g %'<CR>:copen<CR> +" 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' @@ -84,178 +73,274 @@ Plug 'powerman/vim-plugin-AnsiEsc' Plug 'farseer90718/vim-taskwarrior' Plug 'majutsushi/tagbar' call plug#end() + +" vim-test -" colorscheme -set background=light -"colorscheme solarized -colorscheme default +" 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' - -"backups/swap -set noswapfile -set nobackup +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> -" persist the undo tree for each file -set undofile -set undodir^=~/.vim/undo// +" CoC extensions +let g:coc_global_extensions = ['coc-tsserver', 'coc-pyright', 'coc-html'] -" Formatting, like Textmate -nnoremap Q gqip +" 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) " -" Django ... -augroup ft_django - au! - au BufNewFile,BufRead urls.py setlocal nowrap - au BufNewFile,BufRead urls.py normal! zR - au BufNewFile,BufRead dashboard.py normal! zR - au BufNewFile,BufRead local_settings.py normal! zR - - au BufNewFile,BufRead admin.py setlocal filetype=python.django - au BufNewFile,BufRead urls.py setlocal filetype=python.django - au BufNewFile,BufRead models.py setlocal filetype=python.django - au BufNewFile,BufRead views.py setlocal filetype=python.django - au BufNewFile,BufRead settings.py setlocal filetype=python.django - au BufNewFile,BufRead settings.py setlocal foldmethod=marker - au BufNewFile,BufRead forms.py setlocal filetype=python.django - au BufNewFile,BufRead common_settings.py setlocal filetype=python.django - au BufNewFile,BufRead common_settings.py setlocal foldmethod=marker -augroup END +" 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 <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 " -" Mutt ... -augroup ft_muttrc - au! +"" Quick Editing vimrc +nnoremap <leader>ev <C-w>s<C-w>j<C-w>L:e $MYVIMRC<cr> - au BufRead,BufNewFile *.muttrc set ft=muttrc +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') - au FileType muttrc setlocal foldmethod=marker foldmarker=,}}} -augroup END -" -" General python properness ... -autocmd FileType python set sw=4 -autocmd FileType python set ts=4 -autocmd FileType python set sts=4 - -autocmd FileType python set omnifunc=pythoncomplete#Complete -autocmd FileType html set omnifunc=htmlcomplete#Complete +" clear search highlights +nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> -syntax on -filetype indent on -filetype plugin on +" previews in netrw +let g:netrw_preview = 1 -set omnifunc=syntaxcomplete#Complete +" 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> -" Do not scan included files when doing autocomplete -" When doing C-n in default Vim autocomplete, it looks through all -" includes which can take time. We can turn it off... This is referenced -" at https://stackoverflow.com/questions/2169645/vims-autocomplete-is-excruciatingly-slow -" and on p287 of Practical Vim -set complete-=i +" switch off Coc with Markdown +autocmd FileType markdown let b:coc_suggest_disable = 1 -" Go stuff +"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 = 10 +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> +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 = "neosnippet" +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> -" 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#python#runner = "pytest" -let test#neovim#term_position = "topleft" -let test#python#pytest#options = '-vvv --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 <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> -" -" wildignore -set wildignore=*.swp,*.bak,*.pyc,*.class -set wildignore+=.hg,.git,.svn " Version control -set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files -set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images -set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files -set wildignore+=*.spl " compiled spelling word lists -set wildignore+=*.sw? " Vim swap files -set wildignore+=*.DS_Store " OSX bullshit -set wildignore+=*.luac " Lua byte code -set wildignore+=migrations " Django migrations -set wildignore+=*.pyc " Python byte code -set wildignore+=*.orig " Merge resolution files - -" make complete popupmenu better -set completeopt=longest,menuone - -" leader -let maplocalleader = "\\" -let mapleader = "," - -" Ag -if executable("ag") - set grepprg=ag\ --nogroup\ --nocolor\ --ignore-case\ --column - set grepformat=%f:%l:%c:%m,%f:%l:%m -endif +" 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 +"colorscheme dracula +"colorscheme elflord +let g:gruvbox_contrast_dark = 'hard' +set background=dark +colorscheme gruvbox + + +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 -" maps -nnoremap <leader>b :b <C-d> -nnoremap <leader>g :grep<space> -nnoremap <leader>q :b#<cr> -nnoremap <leader><space> :noh<cr>:call clearmatches()<cr> -nnoremap <leader>e :e ./**/ - -" nice search in buffer -" (example use :14 to select from menu) -nnoremap <leader>S :g//#<left><left> - -" playing with Python syntax highlighting -highlight pythonString cterm=NONE ctermbg=NONE ctermfg=65 -highlight pythonQuotes cterm=NONE ctermbg=NONE ctermfg=65 -highlight pythonBuiltin cterm=NONE ctermbg=NONE ctermfg=32 - -" ghetto linting -autocmd FileType python setlocal makeprg=flake8 -" this makes the quickfix window open automatically after -autocmd QuickFixCmdPost [^l]* cwindow - -" nice statusline -"set statusline=%-20F%m%r%h%w[%L][%{&ff}]%y[%p%%][%04l,%04v] -"set statusline+=%{gutentags#statusline()} -set statusline=%<\ %f\ %m%r%y%w%=\ L:\ \%l\/\%L\ C:\ \%c\ +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 + +hi Search cterm=NONE ctermfg=black ctermbg=blue +hi Visual cterm=NONE ctermfg=black ctermbg=blue |