" 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=',' " mise setup lua vim.env.PATH = vim.env.HOME .. "/.local/share/mise/shims:" .. vim.env.PATH " netrw let g:netrw_banner = 0 let g:netrw_liststyle = 1 let g:netrw_list_hide = '^\.' let g:netrw_winsize=25 map n :Lexplore " https://stackoverflow.com/questions/34675677/disable-highlight-matched-parentheses-in-vim-let-loaded-matchparen-1-not-w let g:loaded_matchparen=1 " 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 " https://stackoverflow.com/questions/34675677/disable-highlight-matched-parentheses-in-vim-let-loaded-matchparen-1-not-w let g:loaded_matchparen=1 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 noshowmatch 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 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 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 packadd! gruvbox-material " https://github.com/sainnhe/gruvbox-material.git colorscheme gruvbox-material 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,css,scss 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 result = expand("%:p") let @* = result let @+ = result echom "Copied to clipboard: " . result endfunction function! CopyToSystemClipboardWithLine() let result = expand("%:p") . ":" . line(".") let @* = result let @+ = result echom "Copied to clipboard: " . result endfunction nmap fY :call CopyToSystemClipboard() nmap fL :call CopyToSystemClipboardWithLine() " 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 " 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 packadd! plenary.nvim " https://github.com/nvim-lua/plenary.nvim.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! nvim-spider " https://github.com/chrisgrieser/nvim-spider.git lua require "spider_config" " projectionist packadd! vim-projectionist " https://github.com/tpope/vim-projectionist.git let g:projectionist_heuristics = { \ "*.go": { \ "*_test.go": { \ "type": "source", \ "alternate": "{}.go", \ }, \ "*.go": { \ "type": "source", \ "alternate": "{}_test.go", \ }, \ }, \ "*.rb": { \ "app/*.rb": { \ "type": "source", \ "alternate": "spec/{}_spec.rb", \ }, \ "lib/*.rb": { \ "type": "source", \ "alternate": "spec/lib/{}_spec.rb", \ }, \ "spec/*_spec.rb": { \ "type": "source", \ "alternate": "app/{}.rb", \ }, \ "spec/lib/*_spec.rb": { \ "type": "source", \ "alternate": "lib/{}.rb", \ }, \ }, \ } nnoremap a :A nnoremap A :AV " 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"