" auto-install vim-plug if empty(glob('~/.config/nvim/autoload/plug.vim')) silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall | source $MYVIMRC endif " specify a directory for storing plugins call plug#begin(stdpath('data') . '/plugged') " list plugins Plug 'lifepillar/vim-solarized8' Plug 'dag/vim-fish' Plug 'ethanholz/nvim-lastplace' Plug 'neovim/nvim-lspconfig' Plug 'tomlion/vim-solidity' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update " Initialize plugin system (🗒️ install: https://github.com/junegunn/vimplug) call plug#end() lua require'nvim-lastplace'.setup{} " enable terminal colors to be set from app set termguicolors " tie to system clipboard set clipboard=unnamedplus " clear inc highlights on esc nnoremap :noh " choose my favorite colorscheme on my chosen background set background=dark colorscheme solarized8 " enable line numbers set nu " always scroll with cursor set so=0 " 999 " folding set foldmethod=indent set foldnestmax=10 " set nofoldenable set foldlevelstart=99 autocmd FileType * setlocal foldenable " set up tabs (note: eventually exceptions could be added for certain files: https://stackoverflow.com/a/51995699 set tabstop=2 set shiftwidth=2 set expandtab set smartindent " sign gutter set signcolumn=yes " auto apply chezmoi edits: https://www.chezmoi.io/docs/how-to/#use-your-preferred-editor-with-chezmoi-edit-and-" " " chezmoi-edit-config " autocmd BufWritePost ~/.local/share/chezmoi/* ! chezmoi apply --source-path "%" lua << EOF -- enable lsp server -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#tsserver -- require'lspconfig'.tsserver.setup{} -- setup basic lsp local nvim_lsp = require('lspconfig') -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. local opts = { noremap=true, silent=true } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) -- buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) -- buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) -- buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) -- buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) -- buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'tsserver' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, flags = { debounce_text_changes = 150, } } end EOF