# Neovim Plugins **Neovim plugins** extend the editor with new features: syntax highlighting, fuzzy search, git integration, language servers, autocomplete. The plugin ecosystem is large and powerful. ## Plugin managers A plugin manager downloads and manages plugins. Popular managers: - **lazy.nvim** — modern, lazy-loading (popular in 2024+) - **packer.nvim** — compile-based, fast - **vim-plug** — simple, light - **dein.vim** — heavy but comprehensive Most new setups use `lazy.nvim`. ## Install lazy.nvim ```bash git clone --filter=blob:none --sparse https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy/lazy.nvim ``` Then in `init.lua`: ```lua 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", lazypath}) end vim.opt.rtp:prepend(lazypath) require("lazy").setup("plugins") ``` Create `~/.config/nvim/lua/plugins/init.lua` with plugin specs. ## Example plugins ```lua -- ~/.config/nvim/lua/plugins/init.lua return { -- Syntax highlighting { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate", }, -- Fuzzy finder { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, }, -- LSP framework { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim" }, }, -- Autocomplete { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp" }, }, -- Git signs { "lewis6991/gitsigns.nvim", }, -- Colorscheme { "folke/tokyonight.nvim", }, } ``` ## Popular plugins - **nvim-treesitter** — semantic syntax highlighting based on AST - **telescope** — fuzzy search for files, buffers, grep - **lspconfig** — language server setup - **nvim-cmp** — autocomplete engine - **gitsigns** — git diff marks in gutter - **nvim-tree** or **oil.nvim** — file browser - **lualine** — status line - **which-key** — keybinding hints ## Installing and updating After adding plugin specs, run `:Lazy sync` (with lazy.nvim). This downloads, installs, and cleans up. `:Lazy update` — update all plugins. `:Lazy clean` — remove unused plugins. `:Lazy log` — view recent changes. ## Plugin configuration Most plugins need setup. Example for lspconfig: ```lua require("lspconfig").pyright.setup({}) -- Python language server ``` For complex setup (many plugins), organize into files: ``` ~/.config/nvim/ ├── init.lua ├── lua/ │ ├── plugins/ │ │ ├── init.lua -- list of plugins │ │ ├── lsp.lua -- lsp setup │ │ └── telescope.lua -- telescope config │ └── config.lua ``` Then require in `init.lua`: ```lua require("config") require("plugins.lsp") require("plugins.telescope") ``` ## Finding plugins Search at [nvim.dev](https://nvim.dev), [GitHub](https://github.com/topics/neovim-plugin), or ask in Neovim communities. Read plugin READMEs for setup instructions. **Moderation**: avoid plugin bloat. Start with essentials (LSP, fuzzy find, syntax), add as needed.