set background=dark syntax on filetype plugin indent on let mapleader=',' " netrw let g:netrw_banner = 0 let g:netrw_liststyle = 1 let g:netrw_list_hide = '^\.' let g:netrw_winsize=25 map n :Lexplore " fix helptags for opt/ plugins " https://vi.stackexchange.com/questions/17210/generating-help-tags-for-packages-that-are-loaded-by-vim-8s-package-management command! -nargs=0 -bar Helptags \ for p in glob('~/.vim/pack/git-plugins/opt/*', 1, 1) \| exe 'packadd ' . fnamemodify(p, ':t') \| endfor \| helptags ALL set shiftwidth=2 set shiftround set tabstop=2 set expandtab set smarttab set splitbelow set splitright set encoding=utf-8 set hidden set history=1000 set nowrap set smartindent set copyindent set autoindent set hlsearch set showmatch set wildmenu set wildmode=list:full,full set number set relativenumber set ruler set backspace=indent,eol,start set ignorecase set smartcase set incsearch set history=1000 set undolevels=1000 set title set novisualbell set noerrorbells set nobackup set noswapfile set ttymouse=sgr set mouse=a set mousemodel=popup_setpos " https://github.com/tpope/vim-sensible/issues/78: set lazyredraw set timeoutlen=1000 set ballooneval set balloonevalterm set scrolloff=15 set dictionary=/usr/share/dict/words set shortmess+=I set updatetime=250 set pastetoggle= " See :help thesaurus set thesaurus=$HOME/Documents/thesaurus/thesaurus_pkg/thesaurus.txt set pumheight=200 set completeopt=menu,menuone,popup,noselect set completepopup=width:300,height:50,align:item,border:off set complete-=i set nrformats-=octal set ttimeout set ttimeoutlen=100 set formatoptions+=j set autoread " https://github.com/tpope/vim-sensible/issues/142: set synmaxcol=500 " Enable 24-bit colours. " https://github.com/alacritty/alacritty/issues/109#issuecomment-440353106 if exists('+termguicolors') let &t_8f="\[38;2;%lu;%lu;%lum" let &t_8b="\[48;2;%lu;%lu;%lum" set termguicolors endif " Colour scheme: packadd! nord-vim " https://github.com/arcticicestudio/nord-vim.git colorscheme nord augroup vimrc autocmd! " Automatically load/save views on files. " https://vi.stackexchange.com/posts/13874/revisions autocmd BufWinLeave,BufLeave,BufWritePost,BufHidden,QuitPre ?* nested silent! mkview! autocmd BufWinEnter ?* silent! loadview " set cursor line highlight in insert mode. autocmd InsertEnter * set cul autocmd InsertLeavePre * set nocul " use tabs in .gitconfig autocmd BufEnter .gitconfig setlocal shiftwidth=2 tabstop=2 noexpandtab " Quickfix window is always full-width. " https://github.com/fatih/vim-go/issues/1757#issuecomment-565130503 autocmd FileType qf if (getwininfo(win_getid())[0].loclist != 1) | wincmd J | endif augroup end " Don't remember the current directory for a given file: set viewoptions-=curdir set viewoptions-=options set sessionoptions-=options " Key mappings: nnoremap j gj nnoremap k gk map map map map imap imap imap imap nmap ]q :cn nmap [q :cp nnoremap / :nohlsearch nnoremap :nohlsearch " Select just-pasted text: nnoremap 0 `[v`] " Select just-pasted text and re-indent: nnoremap ) `[v`]= nnoremap 1 :set relativenumber! nnoremap m :marks nnoremap v :vsplit nnoremap s :split " Git mappings " " Copy Git permalink to clipboard for either current line or range function! CopyGitURLToLineOrRange() range if a:firstline == a:lastline execute ".GBrowse!" else execute a:firstline . "," . a:lastline . "GBrowse!" endif endfunction function! OpenGitURLToLineOrRange() range if a:firstline == a:lastline execute ".GBrowse" else execute a:firstline . "," . a:lastline . "GBrowse" endif endfunction nnoremap ab :Gblame nnoremap as :Gstatus nnoremap ac :Commits nnoremap ah :GitGutterLineHighlightsToggle nnoremap aY :call CopyGitURLToLineOrRange() nnoremap ao :call OpenGitURLToLineOrRange() " echo filename of current buffer: nmap fe :echom expand("%:p") " yank filename of current buffer: function! CopyToDefaultRegister() let @" = expand("%:p") echom expand("%:p") endfunction nmap fy :call CopyToDefaultRegister() " and into + register: function! CopyToSystemClipboard() let @* = expand("%:p") let @+ = expand("%:p") echom expand("%:p") endfunction nmap fY :call CopyToSystemClipboard() " ctrl-v to paste from system clipboard in insert mode: inoremap "*Pa " disable Ex mode nnoremap Q function! ToggleQuickFix() if empty(filter(getwininfo(), 'v:val.quickfix')) copen else cclose endif endfunction nmap q :call ToggleQuickFix() nmap l :lclose packadd! async.vim " https://github.com/prabirshrestha/async.vim.git packadd! asyncomplete.vim " https://github.com/prabirshrestha/asyncomplete.vim.git packadd! asyncomplete-lsp.vim " https://github.com/prabirshrestha/asyncomplete-lsp.vim.git inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() . "\" : "\" " vim-markdown configuration: let g:vim_markdown_conceal = 1 " fzf configuration: let g:fzf_action = { \ 'ctrl-t': 'tab split', \ 'ctrl-s': 'split', \ 'ctrl-v': 'vsplit' } nmap t :Files nmap T :GFiles nmap b :Buffers nmap gg :Rg " Lightline configuration: packadd! lightline.vim " https://github.com/itchyny/lightline.vim.git set laststatus=2 function! LightlineLSPErrorText() let l:info = lsp#get_buffer_diagnostics_counts() if info.error == 0 return '' endif let sign = get(g:lsp_diagnostics_signs_error, 'text', 'E') return info.error . sign endfunction function! LightlineLSPWarningText() let l:info = lsp#get_buffer_diagnostics_counts() if info.warning == 0 return '' endif let sign = get(g:lsp_diagnostics_signs_warning, 'text', 'W') return info.warning . sign endfunction let g:lightline = { \ 'colorscheme': 'seoul256', \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'readonly', 'filename', 'modified' ], \ [ 'gitbranch' ], ['lsperror', 'lspwarn'] ], \ 'right': [ ['lineinfo'], ['percent'], ['filetype'], ['gobuild'] ], \ }, \ 'component_function': { \ 'gobuild': 'go#statusline#Show', \ 'gitbranch': 'FugitiveStatusline', \ }, \ 'component_expand': { \ 'lsperror': 'LightlineLSPErrorText', \ 'lspwarn': 'LightlineLSPWarningText', \ }, \ 'component_type': { \ 'lsperror': 'error', \ 'lspwarn': 'warning', \ }, \ 'mode_map': { \ 'n' : 'N', \ 'i' : 'I', \ 'R' : 'R', \ 'v' : 'V', \ 'V' : 'V-LINE', \ "\": 'V-BLOCK', \ 'c' : 'C', \ 's' : 'S', \ 'S' : 'S-LINE', \ "\": 'S-BLOCK', \ 't': 'TERM', \ }, \ } " vim-gitgutter configuration packadd! vim-gitgutter " https://github.com/airblade/vim-gitgutter.git set signcolumn=yes nmap ]h (GitGutterNextHunk) nmap [h (GitGutterPrevHunk) omap ih (GitGutterTextObjectInnerPending) omap ah (GitGutterTextObjectOuterPending) xmap ih (GitGutterTextObjectInnerVisual) xmap ah (GitGutterTextObjectOuterVisual) " vim-fugitive packadd! vim-fugitive " https://github.com/tpope/vim-fugitive.git " vim-go " Doesn't work in after/ftplugin/go.vim: let g:go_def_mapping_enabled = 0 packadd! vim-go " https://github.com/fatih/vim-go.git " LSP configuration: packadd! vim-lsp " https://github.com/prabirshrestha/vim-lsp.git packadd! vim-lsp-settings " https://github.com/mattn/vim-lsp-settings.git let g:lsp_settings = { \ 'gopls': { \ 'initialization_options': { \ 'ui.diagnostic.analyses': { \ 'composites': v:false, \ 'unusedparams': v:true, \ 'unusedresult': v:true, \ 'shadow': v:true, \ 'nilness': v:true, \ 'unusedwrite': v:true, \ }, \ 'staticcheck': v:true, \ 'hoverKind': 'FullDocumentation', \ 'linksInHover': v:false, \ 'experimentalWorkspaceModule': v:false, \ }}} let g:lsp_diagnostics_float_cursor = 1 let g:lsp_diagnostics_float_delay = 175 let g:lsp_diagnostics_highlight_delay = 175 let g:lsp_diagnostics_signs_delay = 175 let g:lsp_diagnostics_code_action_signs_delay = 175 let g:lsp_document_highlight_delay = 500 let g:lsp_async_completion = 1 function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete " number may be clobbered by vim-fugitive? setlocal number setlocal signcolumn=yes " Jump to definitions nmap gd (lsp-definition) nmap gvd :vertical :LspDefinition nmap gsd :belowright :LspDefinition nmap gD (lsp-type-definition) nmap gvD :vertical :LspTypeDefinition nmap gsD :belowright :LspTypeDefinition " Map to leader keys too, easy typo: nmap gd (lsp-definition) nmap gD (lsp-type-definition) " Peek definitions, only on leader keys nmap pd (lsp-peek-definition) nmap pD (lsp-peek-type-definition) " Navigation nmap ]e (lsp-next-error) nmap [e (lsp-previous-error) nmap ]d (lsp-next-diagnostic) nmap [d (lsp-previous-diagnostic) nmap ]r (lsp-next-reference) nmap [r (lsp-previous-reference) " Misc actions nmap ci (lsp-call-hierarchy-incoming) nmap co (lsp-call-hierarchy-outgoing) nmap ca (lsp-code-action) nmap i (lsp-implementation) nmap r (lsp-references) nmap d (lsp-hover) nmap o :silent LspCodeAction source.organizeImports nmap e (lsp-rename) endfunction augroup lsp_install au! autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() autocmd User lsp_diagnostics_updated call lightline#update() autocmd BufWritePre *.go silent LspDocumentFormatSync " autocmd CursorHold silent LspHover augroup END " load internal plugins: runtime macros/matchit.vim " load other plugins: packadd! rust.vim " https://github.com/rust-lang/rust.vim.git packadd! tmux-complete.vim " https://github.com/wellle/tmux-complete.vim.git packadd! vim-commentary " https://github.com/tpope/vim-commentary.git " Requires both fzf.vim plugin to be manually installed: " https://github.com/junegunn/fzf/blob/master/plugin/fzf.vim " and also this separate plugin, which is loaded here: packadd! fzf.vim " https://github.com/junegunn/fzf.vim.git packadd! vim-surround " https://github.com/tpope/vim-surround.git packadd! vim-rhubarb " https://github.com/tpope/vim-rhubarb.git packadd! editorconfig-vim " https://github.com/editorconfig/editorconfig-vim.git