" Prefer $HOME/.vim to $HOME/.config/nvim (for now): " TODO: refactor file structure for nvim set runtimepath^=~/.vim runtimepath+=~/.vim/after runtimepath+=~/.vim/lua runtimepath+=~/.vim/queries let &packpath = &runtimepath 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 nowrap set smartindent set copyindent set autoindent set hlsearch set showmatch set wildmenu set wildmode=list:full,full set number set norelativenumber 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 mouse=a set mousemodel=popup_setpos " https://github.com/tpope/vim-sensible/issues/78: set lazyredraw set timeoutlen=1000 set scroll=10 set scrolloff=15 set dictionary=/usr/share/dict/words " See :help thesaurus set thesaurus=$HOME/Documents/thesaurus/thesaurus_pkg/thesaurus.txt set shortmess+=I set updatetime=250 set pastetoggle= set pumheight=200 " Required for nvim-compe: 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 " Remove trailing whitespace pre-save: autocmd FileType go,ruby,markdown,rust,python,markdown,lua,sql,bash autocmd BufWritePre silent! %s/\s\+$//e 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 nmap + ] nmap ` [ nmap YY "+yy vmap Y "+y nmap ¨ " imap ¨ " nnoremap w :up 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 ! :windo set norelativenumber nnoremap m :marks nnoremap v :vsplit nnoremap s :split nnoremap rp "_ddP nnoremap dq ggVG"_d:wq " abbrevs iabbrev esdebug debugger; // eslint-disable-line no-debugger iabbrev bashstrict set -euo pipefailIFS=$'\n\t' " include lua lua require "helpers" lua require "commands" lua require "test_runner" " Function to eat trailing character when applying iabbrevs. " https://stackoverflow.com/questions/11858927/preventing-trailing-whitespace-when-using-vim-abbreviations func! Eatchar(pat) let c = nr2char(getchar(0)) return (c =~ a:pat) ? '' : c endfunc " 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 as :Git nnoremap ab :Git blame nnoremap ac :Commits nnoremap af gg0jVG:s/^pick/fixup/ \| :redraw!:wq nnoremap aY :call CopyGitURLToLineOrRange() vnoremap aY :call CopyGitURLToLineOrRange() nnoremap ao :call OpenGitURLToLineOrRange() nnoremap ap :execute 'silent !ghpr ' \| redraw! " 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() " 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 " vim-markdown configuration: let g:vim_markdown_conceal = 1 " fzf configuration: let g:fzf_action = { \ 'ctrl-h': 'leftabove vsplit', \ 'ctrl-j': 'rightbelow split', \ 'ctrl-k': 'leftabove split', \ 'ctrl-l': 'rightbelow vsplit', \ 'ctrl-o': 'only | e', \ 'ctrl-s': 'split', \ 'ctrl-t': 'tab split', \ 'ctrl-v': 'vsplit', \ } nmap t :GFiles nmap g :GFiles? nmap T :Files nmap b :Buffers nmap rg :Rg " lualine.nvim packadd! lualine.nvim " https://git.netflux.io/rob/lualine.nvim.git packadd! nvim-web-devicons " https://github.com/nvim-tree/nvim-web-devicons.git lua require "lightline_config" " gitsigns.nvim packadd! gitsigns.nvim " https://github.com/lewis6991/gitsigns.nvim.git lua require "gitsigns_config" " enable inline vim highlighting: let g:vimsyn_embed= 'lPr' " 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 " load internal plugins: runtime macros/matchit.vim " load other plugins: packadd! rust.vim " https://github.com/rust-lang/rust.vim.git packadd! vim-commentary " https://github.com/tpope/vim-commentary.git packadd! vim-rails " https://github.com/tpope/vim-rails.git packadd! vim-jsx-pretty " https://github.com/MaxMEllon/vim-jsx-pretty.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 packadd! vim-wordmotion " https://github.com/chaoren/vim-wordmotion.git " aerial packadd! aerial.nvim " https://github.com/stevearc/aerial.nvim.git lua require "aerial_config" " conform.nvim: packadd! conform.nvim " https://github.com/stevearc/conform.nvim.git lua require "conform_config" " treesitter: packadd! nvim-treesitter " https://github.com/nvim-treesitter/nvim-treesitter.git packadd! nvim-treesitter-textobjects " https://github.com/nvim-treesitter/nvim-treesitter-textobjects.git packadd! nvim-treesitter-refactor " https://github.com/nvim-treesitter/nvim-treesitter-refactor.git packadd! nvim-treesitter-context " https://github.com/nvim-treesitter/nvim-treesitter-context.git packadd! playground " https://github.com/nvim-treesitter/playground.git lua require "treesitter_config" " copilot: packadd! copilot.lua " https://github.com/zbirenbaum/copilot.lua.git lua require "copilot_config" " nvim-cmp: packadd! nvim-cmp " https://github.com/hrsh7th/nvim-cmp.git packadd! copilot-cmp " https://github.com/zbirenbaum/copilot-cmp.git packadd! vim-vsnip " https://github.com/hrsh7th/vim-vsnip.git packadd! vim-vsnip-integ " https://github.com/hrsh7th/vim-vsnip-integ.git packadd! cmp-vsnip " https://github.com/hrsh7th/cmp-vsnip.git packadd! cmp-nvim-lsp " https://github.com/hrsh7th/cmp-nvim-lsp.git packadd! cmp-buffer " https://github.com/hrsh7th/cmp-buffer.git packadd! cmp-path " https://github.com/hrsh7th/cmp-path.git packadd! cmp-calc " https://github.com/hrsh7th/cmp-calc packadd! cmp-tmux " https://github.com/andersevenrud/cmp-tmux.git lua require "nvim_cmp_config" lua require "snippet_config" " LSP: packadd! nvim-lspconfig " https://github.com/neovim/nvim-lspconfig.git packadd! lsp_signature.nvim " https://github.com/ray-x/lsp_signature.nvim.git packadd! fzf-lsp.nvim " https://github.com/gfanto/fzf-lsp.nvim.git lua require "lsp_config"