init.lua Fullstack
Definição curta: Exemplo completo de
init.luacom plugin manager (lazy.nvim), LSP, Treesitter, Telescope, nvim-cmp e configurações avançadas.
Antes de começar
- Ter lido Init.lua básico
- Um gerenciador de plugins configurado
O que você vai aprender
- Explicar Estrutura de arquivos com suas palavras
- Explicar init.lua (principal) com suas palavras
- Explicar lua/user/plugins.lua com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
O que é
Este é um setup completo e funcional com todos os principais plugins e configurações. Estruturado em módulos separados.
Estrutura de arquivos
~/.config/nvim/
├── init.lua
├── lua/
│ └── user/
│ ├── options.lua
│ ├── keymaps.lua
│ ├── plugins.lua
│ └── lsp/
│ ├── init.lua
│ ├── servers.lua
│ └── formatting.luainit.lua (principal)
-- ~/.config/nvim/init.lua
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.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)
-- Plugins
require("user.plugins")
-- Config
require("user.options")
require("user.keymaps")
require("user.lsp")lua/user/plugins.lua
-- ~/.config/nvim/lua/user/plugins.lua
return {
-- Lazy
{ "folke/lazy.nvim" },
-- LSP
{ "neovim/nvim-lspconfig" },
{ "mason-org/mason.nvim" },
{ "mason-org/mason-lspconfig.nvim" },
-- Treesitter
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
{ "nvim-treesitter/nvim-treesitter-textobjects" },
-- Completion
{ "hrsh7th/nvim-cmp" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "hrsh7th/cmp-buffer" },
{ "hrsh7th/cmp-path" },
{ "L3MON4D3/LuaSnip" },
{ "saadparwaiz1/cmp_luasnip" },
-- Telescope
{ "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } },
-- UI
{ "catppuccin/nvim", name = "catppuccin" },
}lua/user/options.lua
-- ~/.config/nvim/lua/user/options.lua
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
vim.opt.signcolumn = "yes"
vim.opt.expandtab = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.smartindent = true
vim.opt.wrap = false
vim.opt.hidden = true
vim.opt.termguicolors = true
vim.g.mapleader = " "lua/user/keymaps.lua
-- ~/.config/nvim/lua/user/keymaps.lua
vim.keymap.set("n", "<leader>w", ":w<CR>", { silent = true })
vim.keymap.set("n", "<leader>q", ":q<CR>", { silent = true })
vim.keymap.set("n", "<Esc>", ":noh<CR>", { silent = true })
vim.keymap.set("n", "j", "v:count || mode(1)[0] == 'no' and 'j' or 'gj'", { expr = true })
vim.keymap.set("n", "k", "v:count || mode(1)[0] == 'no' and 'k' or 'gk'", { expr = true })Diagrama de fluxo de carregamento
flowchart LR
A["init.lua"] --> B["plugins.lua\nlazy.nvim"]
A --> C["options.lua"]
A --> D["keymaps.lua"]
A --> E["lsp/init.lua"]
B --> F["LSP Config"]
B --> G["Treesitter"]
B --> H["Telescope"]
B --> I["cmp"]Você aprendeu
- Estrutura de arquivos
- init.lua (principal)
- lua/user/plugins.lua
- lua/user/options.lua
- lua/user/keymaps.lua
Perguntas para reflexão
- O que Estrutura de arquivos resolve, e o que se perde sem isso?
- O que init.lua (principal) resolve, e o que se perde sem isso?
- O que lua/user/plugins.lua resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- init.lua Minimal — Versão simplificada
- Configuração LSP — Detalhes do LSP
Referências
- lazy.nvim — Plugin manager
- Neovim Lua Guide — Documentação