Neovim in 2026: A Practical Setup for People Who Also Have Work to Do

A modern config that gets you to a working editor without losing a weekend

Neovim has a reputation, and not entirely an unfair one: the editor you spend a weekend configuring instead of using. I’ve lost those weekends. I’ve also come out the other side with an editor I genuinely prefer to anything else, and the good news is that in 2026 you don’t need to lose the weekend any more. The ecosystem has matured into a handful of plugins that do the heavy lifting, and a sensible config is a few hundred lines of readable Lua. This is the setup I’d give someone who wants a capable editor and also, crucially, has actual work to do.

Advertisement

Modern Neovim stands on four pillars, and understanding what each is for saves a lot of confusion.

  • lazy.nvim — the plugin manager. It installs plugins, and “lazy-loads” them so they only spin up when needed, which keeps startup fast.
  • Treesitter — a proper parser for your code. It gives you syntax highlighting that understands structure, not just regexes, plus smarter indentation and selection.
  • LSP — the Language Server Protocol. The same engine that powers IntelliSense in other editors: completion, go-to-definition, rename, diagnostics. Neovim has a built-in LSP client; you just point it at language servers.
  • Telescope — a fuzzy finder for files, text, symbols and just about everything else. Once it’s in your fingers you’ll wonder how you navigated without it.

You can absolutely start from a pre-built “distribution” like LazyVim or kickstart.nvim, and for a lot of people that’s the right call. But rolling a small config yourself means you understand every line, which pays off the first time something breaks.

Everything lives under ~/.config/nvim/, with init.lua as the entry point. The standard pattern is to self-install lazy.nvim if it’s missing, then hand it a list of plugin specs.

-- ~/.config/nvim/init.lua
vim.g.mapleader = " "                 -- space as leader, set before plugins

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.uv.fs_stat(lazypath) then
  vim.fn.system({
    "git", "clone", "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup("plugins")      -- loads lua/plugins/*.lua

That last line tells lazy.nvim to read every file under lua/plugins/, so you can split your config into one small file per concern rather than one thousand-line monster. Open Neovim, lazy.nvim installs itself and everything you’ve specified, and :Lazy gives you a tidy dashboard to manage it all.

Two short plugin specs get you the bulk of a modern editing experience. Treesitter first:

-- lua/plugins/treesitter.lua
return {
  "nvim-treesitter/nvim-treesitter",
  build = ":TSUpdate",
  config = function()
    require("nvim-treesitter.configs").setup({
      ensure_installed = { "lua", "go", "python", "bash", "markdown" },
      highlight = { enable = true },
      indent = { enable = true },
    })
  end,
}

For LSP, the painless route in 2026 is to pair mason.nvim (which installs language servers for you) with nvim-lspconfig (which knows how to configure them). You no longer hand-install gopls or pyright system-wide and fight PATH; Mason drops them into Neovim’s own data directory.

-- lua/plugins/lsp.lua
return {
  "neovim/nvim-lspconfig",
  dependencies = {
    "williamboman/mason.nvim",
    "williamboman/mason-lspconfig.nvim",
  },
  config = function()
    require("mason").setup()
    require("mason-lspconfig").setup({
      ensure_installed = { "lua_ls", "gopls", "pyright" },
    })

    vim.api.nvim_create_autocmd("LspAttach", {
      callback = function(args)
        local opts = { buffer = args.buf }
        vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
        vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
        vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
        vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
      end,
    })
  end,
}

The LspAttach autocommand wires up keymaps only in buffers where a language server actually attached, so gd (go to definition), K (hover docs) and rename only exist where they make sense. Run :Mason to browse and install more servers from a menu.

Telescope is the plugin that changes how you move around. Fuzzy-find files, grep your whole project live, jump to symbols — all from a few leader keys.

-- lua/plugins/telescope.lua
return {
  "nvim-telescope/telescope.nvim",
  dependencies = { "nvim-lua/plenary.nvim" },
  config = function()
    local builtin = require("telescope.builtin")
    vim.keymap.set("n", "<leader>ff", builtin.find_files, { desc = "Find files" })
    vim.keymap.set("n", "<leader>fg", builtin.live_grep,  { desc = "Live grep" })
    vim.keymap.set("n", "<leader>fb", builtin.buffers,    { desc = "Buffers" })
  end,
}

Install ripgrep on your system and live_grep becomes blisteringly fast across huge codebases. With space-f-g I can search every file in a repository as I type, which alone justifies the whole setup. Add a completion engine (blink.cmp or nvim-cmp) and a statusline (lualine) and you have an editor that holds its own against any IDE — for a fraction of the resource use.

Is Neovim worth it in 2026? It depends entirely on who you are. If you bounce between languages, live in the terminal, work over SSH on remote boxes, or simply value a tool you can shape exactly to your hands, the answer is an enthusiastic yes — and the modern stack means you reach “productive” in an evening, not a lost weekend. The config above is genuinely most of the way there.

But be honest with yourself. If you want an editor that’s brilliant five minutes after install and you never want to touch a config file, a mainstream graphical IDE is the saner choice, and there’s no shame in it. Neovim rewards tinkering, and it quietly punishes those who’d rather not. I’m firmly in the tinkering camp, so it’s my daily driver — but I’d only push it on you if “I get to configure my own editor” reads as a feature rather than a chore.

Advertisement

Related Content

Advertisement
Smarc
Written by Smarc

Founder and editor of vo.rs. A lifelong tinkerer who self-hosts far more than is sensible, hardens Linux boxes for fun, and prods the latest AI tools to see what they can really do. The how-to guides here are the notes Smarc wishes had existed the first time round.