From 8bbd3c0fcf1238930f12e8f68f3a73b41feffdcf Mon Sep 17 00:00:00 2001 From: Mitchell Riedstra Date: Mon, 17 Feb 2025 21:43:26 -0500 Subject: Update nvim config with LSP support again --- dotfiles/nvim/init.lua | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/dotfiles/nvim/init.lua b/dotfiles/nvim/init.lua index ea46010..e655d16 100644 --- a/dotfiles/nvim/init.lua +++ b/dotfiles/nvim/init.lua @@ -12,6 +12,10 @@ require "paq" { 'tpope/vim-fugitive', 'lewis6991/gitsigns.nvim', 'williamboman/mason.nvim', + 'fatih/vim-go', + {'neovim/nvim-lspconfig'}, + {'hrsh7th/cmp-nvim-lsp'}, + {'hrsh7th/nvim-cmp'}, -- 'nvim-lualine/lualine.nvim', -- status line } @@ -71,9 +75,7 @@ require'nvim-treesitter.configs'.setup { -- A list of parser names, or "all" -- https://github.com/nvim-treesitter/nvim-treesitter ensure_installed = { - "c", "lua", 'rust', 'javascript', 'typescript', 'go', 'hcl', - 'java', 'lua', 'make', 'perl', 'python', 'scheme', 'sql', 'svelte', - 'terraform', 'yaml', 'bash', 'css', 'haskell', + "c", "lua", 'javascript', 'go', 'sql', 'python', 'bash', 'css' }, -- Install parsers synchronously (only applied to `ensure_installed`) @@ -103,6 +105,41 @@ require'nvim-treesitter.configs'.setup { require("mason").setup() +-- LSP +-- Reserve a space in the gutter +-- This will avoid an annoying layout shift in the screen +vim.opt.signcolumn = 'yes' + +-- Add cmp_nvim_lsp capabilities settings to lspconfig +-- This should be executed before you configure any language server +local lspconfig_defaults = require('lspconfig').util.default_config +lspconfig_defaults.capabilities = vim.tbl_deep_extend( + 'force', + lspconfig_defaults.capabilities, + require('cmp_nvim_lsp').default_capabilities() +) + +-- This is where you enable features that only work +-- if there is a language server active in the file +vim.api.nvim_create_autocmd('LspAttach', { + desc = 'LSP actions', + callback = function(event) + local opts = {buffer = event.buf} + + vim.keymap.set('n', 'K', 'lua vim.lsp.buf.hover()', opts) + vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + vim.keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + vim.keymap.set('n', 'go', 'lua vim.lsp.buf.type_definition()', opts) + vim.keymap.set('n', 'gr', 'lua vim.lsp.buf.references()', opts) + vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) + vim.keymap.set('n', '', 'lua vim.lsp.buf.rename()', opts) + vim.keymap.set({'n', 'x'}, '', 'lua vim.lsp.buf.format({async = true})', opts) + vim.keymap.set('n', '', 'lua vim.lsp.buf.code_action()', opts) + end, +}) + + -- Personal config options below: vim.opt.nu = true @@ -173,3 +210,10 @@ vim.cmd("autocmd VimResized * wincmd =") vim.cmd('colorscheme gruvbox') + +-- vim.lsp.enable('gopls') -- nvim 0.11, requires additional files: +-- https://lsp-zero.netlify.app/blog/lsp-in-3-steps.html + +-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md +-- require('lspconfig').gopls.setup({}) +-- require('lspconfig').bashls.setup({}) -- cgit v1.2.3