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 <leader>n <esc>:Lexplore<cr> " 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 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=<f2> " 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 " Enable 24-bit colours. " https://github.com/alacritty/alacritty/issues/109#issuecomment-440353106 if exists('+termguicolors') let &t_8f="\<Esc>[38;2;%lu;%lu;%lum" let &t_8b="\<Esc>[48;2;%lu;%lu;%lum" set termguicolors endif " Colour scheme: packadd! gruvbox let g:gruvbox_contrast_dark='medium' let g:gruvbox_contrast_light='soft' let g:gruvbox_improved_strings=1 let g:gruvbox_improved_warnings=1 let g:gruvbox_vert_split='bg2' colorscheme gruvbox function! SwitchBackground() if &background == 'dark' set background=light let g:lightline.colorscheme = 'solarized' call lightline#init() call lightline#colorscheme() call lightline#update() else set background=dark let g:lightline.colorscheme = 'seoul256' call lightline#init() call lightline#colorscheme() call lightline#update() endif endfunction 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 " But, don't remember the current directory for a given file: set viewoptions-=curdir " Key mappings: nmap <silent> ,/ :nohlsearch<CR> nnoremap j gj nnoremap k gk map <up> <nop> map <down> <nop> map <left> <nop> map <right> <nop> imap <up> <nop> imap <down> <nop> imap <left> <nop> imap <right> <nop> nmap ]q :cn<cr> nmap [q :cp<cr> nnoremap <silent> ,/ :nohlsearch<cr> map <c-t> <esc>:tabnew<cr> " Select just-pasted text: nnoremap <silent> <leader>0 `[v`] nnoremap <silent> <leader>1 :set relativenumber!<cr> nnoremap <silent> <leader>2 :call SwitchBackground()<cr> map <leader>m :marks<cr> map <leader>R :ALERename<cr> map <leader>v :vsplit<cr> map <leader>s :split<cr> map <leader>! <esc>:only<cr> " ctrl-c to unload a buffer nnoremap <silent> <c-q> :bp\|bd #<cr> function! ToggleQuickFix() if empty(filter(getwininfo(), 'v:val.quickfix')) copen else cclose endif endfunction nmap <silent> <leader>q :call ToggleQuickFix()<cr> nmap <silent> <leader>l :lclose<cr> " deoplete configuration packadd! deoplete.nvim " Disable completion messages: set shortmess+=c let g:deoplete#enable_at_startup = 1 call deoplete#custom#option('num_processes', 6) call deoplete#custom#option('max_list', 250) call deoplete#custom#option('auto_complete_delay', 0) call deoplete#custom#option('auto_refresh_delay', 250) call deoplete#custom#option('refresh_always', v:false) call deoplete#custom#option('omni_patterns', { \ 'go': '[^. *\t]\.\w*', \}) " <TAB>: completion. inoremap <expr><S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>" inoremap <expr><Tab> pumvisible() ? "\<C-n>" : "\<Tab>" inoremap <expr><C-]> pumvisible() ? "\<C-]>" : "\<Enter>" " vim-markdown configuration: let g:vim_markdown_conceal = 1 " fzf configuration: nmap <leader>t :Files<cr> nmap <leader>T :GFiles<cr> nmap <leader>b :Buffers<cr> nmap <leader>gg :Rg<cr> " Lightline configuration: packadd! lightline.vim function! GitHead() return '[' . FugitiveHead() . ']' endfunction set laststatus=2 let g:lightline = { \ 'colorscheme': 'seoul256', \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'readonly', 'filename', 'modified' ], \ [ 'gitbranch' ] ], \ 'right': [ ['lineinfo'], ['percent'], ['filetype'], ['gobuild'] ], \ }, \ 'component_function': { \ 'gobuild': 'go#statusline#Show', \ 'gitbranch': 'GitHead', \ }, \ 'mode_map': { \ 'n' : 'N', \ 'i' : 'I', \ 'R' : 'R', \ 'v' : 'V', \ 'V' : 'V-LINE', \ "\<C-v>": 'V-BLOCK', \ 'c' : 'C', \ 's' : 'S', \ 'S' : 'S-LINE', \ "\<C-s>": 'S-BLOCK', \ 't': 'TERM', \ }, \ } " vim-gitgutter configuration packadd! vim-gitgutter set signcolumn=yes nnoremap hg :GitGutterLineHighlightsToggle<cr> nmap ]h <Plug>(GitGutterNextHunk) nmap [h <Plug>(GitGutterPrevHunk) omap ih <Plug>(GitGutterTextObjectInnerPending) omap ah <Plug>(GitGutterTextObjectOuterPending) xmap ih <Plug>(GitGutterTextObjectInnerVisual) xmap ah <Plug>(GitGutterTextObjectOuterVisual) " Vim-Rust configuration: let g:rustfmt_autosave = 1 " echodoc configuration: set cmdheight=1 set noshowmode let g:echodoc#type='echo' let g:echodoc#enable_at_startup = 1 packadd! echodoc.vim " ALE configuration: nmap [L <Plug>(ale_first) nmap ]L <Plug>(ale_last) nmap [e <Plug>(ale_previous_wrap_error) nmap ]e <Plug>(ale_next_wrap_error) nmap [w <Plug>(ale_previous_wrap) nmap ]w <Plug>(ale_next_wrap) nmap <leader>ad :ALEDetail<cr> map <Leader>g :ALEGoToDefinition<CR> map <Leader>f :ALEFindReferences<CR> map <Leader>fv :ALEFindReferences -vsplit<CR> map <Leader>fh :ALEFindReferences -split<CR> map <Leader>ft :ALEFindReferences -tab<CR> nnoremap gD :ALEGoToTypeDefinition<cr> nnoremap gd :ALEGoToDefinition<cr> command GoToDefinition ALEGoToDefinition command GoToTypeDefinition ALEGoToTypeDefinition command FindReferences ALEFindReferences command Rename ALERename let g:ale_sign_column_always = 1 let g:ale_fix_on_save = 1 let g:ale_lint_on_text_changed = 1 let g:ale_lint_on_enter = 1 let g:ale_lint_on_insert_leave = 1 let g:ale_lint_on_save = 1 let g:ale_echo_cursor = 1 let g:ale_lint_delay = 100 let g:ale_lsp_suggestions = 1 let g:ale_set_balloons = 1 " NOTE: Needs https://github.com/dense-analysis/ale/issues/3350 let g:ale_rust_analyzer_config = { \ 'diagnostics': { 'disabled': ['unresolved-import'] }, \ 'cargo': { 'loadOutDirsFromCheck': v:true }, \ 'procMacro': { 'enable': v:true }, \ 'checkOnSave': { 'command': 'clippy', 'enable': v:true }, \ } let g:ale_go_goimports_options = '-local github.com/sensiblecodeio/cantabular' let g:ale_go_gopls_init_options = { \ 'ui.diagnostic.analyses': { \ 'composites': v:false, \ 'unusedparams': v:true, \ 'unusedresult': v:true, \ 'shadow': v:true, \ }, \ 'staticcheck': v:true} " let g:ale_command_wrapper = 'nice -n5' let g:ale_completion_enabled = 0 let g:ale_close_preview_on_insert = 1 let g:ale_hover_to_preview = 1 let g:ale_history_log_output = 0 let g:ale_linters = { \ 'javascript': ['eslint'], \ 'go': ['gopls'], \ 'rust': ['analyzer'], \ 'css': ['stylelint'], \ 'python': ['pyls'], \ 'ruby': ['rubocop'], \ } let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \ 'javascript': ['prettier'], \ 'rust': [], \ 'go': [], \ 'css': ['stylelint'], \ 'python': ['autopep8'], \ 'ruby': ['rubocop'], \ } " load internal plugins: runtime macros/matchit.vim " load ALE only after configured: packadd! ale " load other plugins: packadd! tmux-complete.vim packadd! vim-commentary " 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 packadd! vim-go packadd! vim-surround packadd! vim-yaml-folds packadd! vim-fugitive