rookiemistake

Come ho migrato il mio setup a Neovim #2

Due settimane per passare da un IDE completo a un editor da terminale, configurato in Lua.

Pubblicato2 min di lettura237 parole
Indice

Per anni ho usato un IDE completo. Funzionava, ma ogni aggiornamento portava qualche plugin rotto e una manciata di secondi in più all'avvio. Ho deciso di provare Neovim per un mese intero, senza tornare indietro.

La struttura della configurazione

Ho tenuto tutto in un'unica cartella, divisa per responsabilità:

~/.config/nvim
init.lua
lua/
  core/
    options.lua
    keymaps.lua
  plugins/
    lsp.lua
    telescope.lua
    treesitter.lua

Il file di ingresso si limita a caricare i moduli:

init.lua
vim.g.mapleader = " "
 
require("core.options")
require("core.keymaps")
 
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", lazypath })
end
vim.opt.rtp:prepend(lazypath)
 
require("lazy").setup("plugins")

Le opzioni che contano davvero

Di tutte le opzioni che ho provato, queste sono quelle che ho tenuto:

lua/core/options.lua
local opt = vim.opt
 
opt.number = true
opt.relativenumber = true
opt.signcolumn = "yes"
opt.expandtab = true
opt.shiftwidth = 2
opt.scrolloff = 8
opt.undofile = true

Le righe evidenziate sono quelle che mi hanno fatto smettere di perdere il cursore: numeri relativi e colonna dei segni sempre visibile, così il testo non "salta" quando compare un errore.

LSP senza impazzire

La parte più temuta si è rivelata la più semplice. Con il client LSP integrato bastano poche righe per lingua:

lua/plugins/lsp.lua
return {
  "neovim/nvim-lspconfig",
  config = function()
    vim.lsp.enable({ "ts_ls", "lua_ls", "rust_analyzer" })
 
    vim.api.nvim_create_autocmd("LspAttach", {
      callback = function(event)
        local map = function(keys, fn)
          vim.keymap.set("n", keys, fn, { buffer = event.buf })
        end
        map("gd", vim.lsp.buf.definition)
        map("K", vim.lsp.buf.hover)
        map("<leader>rn", vim.lsp.buf.rename)
      end,
    })
  end,
}

Cosa mi manca

Onestamente poco. Il debugger visuale è l'unica cosa per cui ogni tanto riapro l'IDE. Per tutto il resto, nvim . e via.