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.
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à:
init.lua
lua/
core/
options.lua
keymaps.lua
plugins/
lsp.lua
telescope.lua
treesitter.luaIl file di ingresso si limita a caricare i moduli:
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:
local opt = vim.opt
opt.number = true
opt.relativenumber = true
opt.signcolumn = "yes"
opt.expandtab = true
opt.shiftwidth = 2
opt.scrolloff = 8
opt.undofile = trueLe 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:
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.
Indice