My Neovim Setup

I have been using Neovim as my primary editor for several years. The setup has gone through many iterations and landed on something minimal and fast.

Philosophy

Less is more. Every plugin must earn its place. If I can do it with a keymap and a built-in command, I skip the plugin.

Core Plugins

  • lazy.nvim — plugin manager. Lazy-loads everything.
  • nvim-lspconfig — LSP configuration for gopls, typescript-language-server, lua_ls.
  • nvim-cmp — completion engine. Sources: LSP, buffer, path.
  • treesitter — syntax highlighting, text objects, incremental selection.
  • telescope.nvim — fuzzy finder for files, grep, LSP symbols.
  • oil.nvim — file explorer as a buffer. Edit the filesystem like text.

LSP Configuration

local lspconfig = require('lspconfig')

lspconfig.gopls.setup({
    settings = {
        gopls = {
            analyses = { unusedparams = true },
            staticcheck = true,
        },
    },
})

lspconfig.ts_ls.setup({})

Key Mappings

vim.keymap.set('n', 'gd', vim.lsp.buf.definition)
vim.keymap.set('n', 'gr', vim.lsp.buf.references)
vim.keymap.set('n', 'K', vim.lsp.buf.hover)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename)
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action)

What I Skipped

No file tree (oil.nvim is better). No status line plugin (the built-in one is fine). No git gutter (I use the CLI). No AI completion (I prefer explicit requests).