*LazyVim.txt* For Neovim >= 0.8.0 Last change: 2023 January 09 ============================================================================== Table of Contents *LazyVim-table-of-contents* 1. LazyVim |LazyVim-lazyvim| - Features |LazyVim-features| - Requirements |LazyVim-requirements| - Getting Started |LazyVim-getting-started| - File Structure |LazyVim-file-structure| - Configuring **LazyVim** |LazyVim-configuring-**lazyvim**| - Keymaps |LazyVim-keymaps| - Plugins |LazyVim-plugins| ============================================================================== 1. LazyVim *LazyVim-lazyvim* LazyVim is a Neovim setup powered by lazy.nvim to make it easy to customize and extend your config. Rather than having to choose between starting from scratch or using a pre-made distro, LazyVim offers the best of both worlds - the flexibility to tweak your config as needed, along with the convenience of a pre-configured setup.

image

FEATURES *LazyVim-features* - Transform your Neovim into a full-fledged IDE - Easily customize and extend your config with lazy.nvim - Blazingly fast - Sane default settings for options, autocmds, and keymaps - Comes with a wealth of plugins pre-configured and ready to use REQUIREMENTS *LazyVim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) - a Nerd Font **_(optional)_** GETTING STARTED *LazyVim-getting-started* You can find a starter template for **LazyVim** here **TLDR:** >lua require("lazy").setup({ spec = { -- import LazyVim plugins { "LazyVim/LazyVim", import = "lazyvim.plugins" }, -- import/override with your plugins { import = "plugins" }, -- import any extras modules here -- { import = "lazyvim.plugins.extras.lang.typescript" }, -- { import = "lazyvim.plugins.extras.lang.json" }, }, defaults = { lazy = true, -- every plugin is lazy-loaded by default version = "", -- try installing the latest stable version for plugins that support semver }, }) < FILE STRUCTURE *LazyVim-file-structure* The files under config will be automatically loaded at the appropriate time, so you don’t need to require those files manually. **LazyVim** comes with a set of default config files that will be loaded **_before_** your own. See here You can add your custom plugin specs under `lua/plugins/`. All files there will be automatically loaded by lazy.nvim
~/.config/nvim
 lua
    config
       autocmds.lua
       keymaps.lua
       lazy.lua
       options.lua
    plugins
        spec1.lua
        
        spec2.lua
 init.toml
CONFIGURING **LAZYVIM** *LazyVim-configuring-**lazyvim*** Configuring **LazyVim** is exactly the same as using **lazy.nvim** to build a config from scratch. For the full plugin spec documentation please check the **lazy.nvim** readme . Example spec: lua/plugins/example.lua >lua -- every spec file under config.plugins will be loaded automatically by lazy.nvim -- -- In your plugin files, you can: -- add extra plugins -- disable/enabled LazyVim plugins -- override the configuration of LazyVim plugins return { -- change trouble config { "folke/trouble.nvim", -- opts will be merged with the parent spec opts = { use_diagnostic_signs = true }, }, -- disable trouble { "folke/trouble.nvim", enabled = false }, -- add symbols-outline { "simrat39/symbols-outline.nvim", cmd = "SymbolsOutline", keys = { { "cs", "SymbolsOutline", desc = "Symbols Outline" } }, config = true, }, -- override nvim-cmp and add cmp-emoji { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-emoji" }, ---@param opts cmp.ConfigSchema opts = function(_, opts) local cmp = require("cmp") opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } })) end, }, -- change some telescope options and add telescope-fzf-native { "nvim-telescope/telescope.nvim", dependencies = { { "nvim-telescope/telescope-fzf-native.nvim", build = "make" } }, keys = { -- add a keymap to browse plugin files -- stylua: ignore { "fp", function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, desc = "Find Plugin File", }, }, -- change some options opts = { defaults = { layout_strategy = "horizontal", layout_config = { prompt_position = "top" }, sorting_strategy = "ascending", winblend = 0, }, }, -- apply the config and additionally load fzf-native config = function(_, opts) local telescope = require("telescope") telescope.setup(opts) telescope.load_extension("fzf") end, }, -- add pyright and setup tsserver with typescript.nvim { "neovim/nvim-lspconfig", dependencies = { "jose-elias-alvarez/typescript.nvim", init = function() require("lazyvim.util").on_attach(function(_, buffer) -- stylua: ignore vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) end) end, }, ---@class PluginLspOpts opts = { ---@type lspconfig.options servers = { -- pyright will be automatically installed with mason and loaded with lspconfig pyright = {}, tsserver = {}, }, -- you can do any additional lsp server setup here -- return true if you don't want this server to be setup with lspconfig ---@type table setup = { -- example to setup with typescript.nvim tsserver = function(_, opts) require("typescript").setup({ server = opts }) return true end, -- Specify to use this function as a fallback for any server -- [""] = function(server, opts) end, }, }, }, -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, -- treesitter, mason and typescript.nvim. So instead of the above, you can use: { import = "lazyvim.plugins.extras.lang.typescript" }, -- add more treesitter parsers { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = { "bash", "help", "html", "javascript", "json", "lua", "markdown", "markdown_inline", "python", "query", "regex", "tsx", "typescript", "vim", "yaml", }, }, }, -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above -- would overwrite `ensure_installed` with the ne value. -- If you'd rather extend the default config, use the code below instead: { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) vim.list_extend(opts.ensure_installed, { -- add tsx and treesitter ensure_installed = { "tsx", "typescript", }, }) end, }, -- the opts function can also be used to change the default opts: { "nvim-lualine/lualine.nvim", event = "VeryLazy", opts = function(_, opts) table.insert(opts.sections.lualine_x, "") end, }, -- or you can return new options to override all the defaults { "nvim-lualine/lualine.nvim", event = "VeryLazy", opts = function() return { --[[add your custom lualine config here]] } end, }, -- use mini.starter instead of alpha { import = "lazyvim.plugins.extras.ui.mini-starter" }, -- add jsonls and schemastore ans setup treesitter for json, json5 and jsonc { import = "lazyvim.plugins.extras.lang.json" }, -- add any tools you want to have installed below { "williamboman/mason.nvim", opts = { ensure_installed = { "stylua", "shellcheck", "shfmt", "flake8", }, }, }, } < KEYMAPS *LazyVim-keymaps* **LazyVim** uses which-key.nvim to help you remember your keymaps. Just press any key like `` and you’ll see a popup with all possible keymaps starting with ``.

image

General │ Key │ Description │ Mode │ │ │Go to left window │**n** │ │ │Go to lower window │**n** │ │ │Go to upper window │**n** │ │ │Go to right window │**n** │ │ │Increase window height │**n** │ │ │Decrease window height │**n** │ │ │Decrease window width │**n** │ │ │Increase window width │**n** │ │ │Move down │**n**, **v**, **i** │ │ │Move up │**n**, **v**, **i** │ │ │Prev buffer │**n** │ │ │Next buffer │**n** │ │[p │Paste below │**n** │ │]p │Paste above │**n** │ │ │Escape and clear hlsearch │**i**, **n** │ │n │Next search result │**n**, **x**, **o** │ │N │Prev search result │**n**, **x**, **o** │ │ │Save file │**i**, **v**, **n**, **s**│ │l │Lazy │**n** │ │fn │New File │**n** │ │xl │Open Location List │**n** │ │xq │Open Quickfix List │**n** │ │tf │Toggle format on Save │**n** │ │ts │Toggle Spelling │**n** │ │tw │Toggle Word Wrap │**n** │ │tn │Toggle Line Numbers │**n** │ │td │Toggle Diagnostics │**n** │ │tc │Toggle Conceal │**n** │ │gg │Lazygit (cwd) │**n** │ │gG │Lazygit (root dir) │**n** │ │qq │Quit all │**n** │ │hl │Highlight Groups at cursor│**n** │ │ot │Terminal (root dir) │**n** │ │oT │Terminal (cwd) │**n** │ │ │Enter Normal Mode │**t** │ │ww │other-window │**n** │ │wd │delete-window │**n** │ │w- │split-window-below │**n** │ │w\| │split-window-right │**n** │ │l │Last │**n** │ │f │First │**n** │ │ │New Tab │**n** │ │] │Next │**n** │ │d │Close │**n** │ │[ │Previous │**n** │ │b] │Next Buffer │**n** │ │bb │Switch to Other Buffer │**n** │ │b[ │Previous Buffer │**n** │ │ │Switch to Other Buffer │**n** │ LSP │ Key │ Description │ Mode │ │cd │Line Diagnostics │**n** │ │cl │Lsp Info │**n** │ │xd │Telescope Diagnostics│**n** │ │gd │Goto Definition │**n** │ │gr │References │**n** │ │gD │Goto Declaration │**n** │ │gI │Goto Implementation │**n** │ │gt │Goto Type Definition │**n** │ │K │Hover │**n** │ │gK │Signature Help │**n** │ │[d │Next Diagnostic │**n** │ │]d │Prev Diagnostic │**n** │ │]e │Next Error │**n** │ │[e │Prev Error │**n** │ │]w │Next Warning │**n** │ │[w │Prev Warning │**n** │ │ca │Code Action │**n**, **v**│ │cf │Format Document │**n** │ │cf │Format Range │**v** │ │cr │Rename │**n** │ Plugins │ Key │ Description │Mode │ │cm │mason.nvim Mason │**n**│ │bd │mini.bufremove Delete Buffer │**n**│ │bD │mini.bufremove Delete Buffer (Force) │**n**│ │ft │neo-tree.nvim NeoTree (root dir) │**n**│ │fT │neo-tree.nvim NeoTree (cwd) │**n**│ │ │noice.nvim Redirect Cmdline │**c**│ │nl │noice.nvim Noice Last Message │**n**│ │nh │noice.nvim Noice History │**n**│ │na │noice.nvim Noice All │**n**│ │ │noice.nvim Scroll forward │**n**│ │ │noice.nvim Scroll backward │**n**│ │nd │nvim-notify Delete all Notifications │**n**│ │sr │nvim-spectre Replace in files (Spectre) │**n**│ │qs │persistence.nvim Restore Session │**n**│ │ql │persistence.nvim Restore Last Session │**n**│ │qd │persistence.nvim Don’t Save Current Session│**n**│ │/ │telescope.nvim Find in Files (Grep) │**n**│ │ │telescope.nvim Find Files (root dir) │**n**│ │fb │telescope.nvim Buffers │**n**│ │ff │telescope.nvim Find Files (root dir) │**n**│ │fF │telescope.nvim Find Files (cwd) │**n**│ │fr │telescope.nvim Recent │**n**│ │gc │telescope.nvim commits │**n**│ │gs │telescope.nvim status │**n**│ │ha │telescope.nvim Auto Commands │**n**│ │hc │telescope.nvim Commands │**n**│ │hf │telescope.nvim File Types │**n**│ │hh │telescope.nvim Help Pages │**n**│ │hk │telescope.nvim Key Maps │**n**│ │hm │telescope.nvim Man Pages │**n**│ │ho │telescope.nvim Options │**n**│ │hs │telescope.nvim Search Highlight Groups│**n**│ │ht │telescope.nvim Telescope │**n**│ │sb │telescope.nvim Buffer │**n**│ │sc │telescope.nvim Command History │**n**│ │sg │telescope.nvim Grep (root dir) │**n**│ │sG │telescope.nvim Grep (cwd) │**n**│ │sm │telescope.nvim Jump to Mark │**n**│ │, │telescope.nvim Switch Buffer │**n**│ │: │telescope.nvim Command History │**n**│ │ss │telescope.nvim Goto Symbol │**n**│ │]t │todo-comments.nvim Next todo comment │**n**│ │[t │todo-comments.nvim Previous todo comment │**n**│ │xt │todo-comments.nvim Todo Trouble │**n**│ │xtt │todo-comments.nvim Todo Trouble │**n**│ │xT │todo-comments.nvim Todo Telescope │**n**│ │xx │trouble.nvim Document Diagnostics (Trouble) │**n**│ │xX │trouble.nvim Workspace Diagnostics (Trouble) │**n**│ │]] │vim-illuminate Next Reference │**n**│ │[[ │vim-illuminate Prev Reference │**n**│ PLUGINS *LazyVim-plugins* Core - alpha-nvim - catppuccin - cmp-buffer - cmp-nvim-lsp - cmp-path - cmp_luasnip - dressing.nvim - flit.nvim - friendly-snippets - gitsigns.nvim - indent-blankline.nvim - lazy.nvim - leap.nvim - lualine.nvim - LuaSnip - mason-lspconfig.nvim - mason.nvim - mini.ai - mini.bufremove - mini.comment - mini.indentscope - mini.pairs - mini.surround - neo-tree.nvim - neoconf.nvim - neodev.nvim - noice.nvim - nui.nvim - null-ls.nvim - nvim-bufferline.lua - nvim-cmp - nvim-lspconfig - nvim-navic - nvim-notify - nvim-spectre - nvim-treesitter - nvim-treesitter-textobjects - nvim-ts-context-commentstring - nvim-web-devicons - persistence.nvim - plenary.nvim - telescope.nvim - todo-comments.nvim - tokyonight.nvim - trouble.nvim - vim-illuminate - vim-startuptime - which-key.nvim Extras: lang.json To use this, add it to your **lazy.nvim** imports: >lua require("lazy").setup({ spec = { { "folke/LazyVim", import = "lazyvim.plugins" }, { import = "lazyvim.plugins.extras.lang.json" }, { import = "plugins" }, }, }) < - nvim-lspconfig - nvim-treesitter - schemastore.nvim Extras: lang.typescript To use this, add it to your **lazy.nvim** imports: >lua require("lazy").setup({ spec = { { "folke/LazyVim", import = "lazyvim.plugins" }, { import = "lazyvim.plugins.extras.lang.typescript" }, { import = "plugins" }, }, }) < - nvim-lspconfig - nvim-treesitter - typescript.nvim Extras: ui.mini-starter To use this, add it to your **lazy.nvim** imports: >lua require("lazy").setup({ spec = { { "folke/LazyVim", import = "lazyvim.plugins" }, { import = "lazyvim.plugins.extras.ui.mini-starter" }, { import = "plugins" }, }, }) < - mini.starter Generated by panvimdoc vim:tw=78:ts=8:noet:ft=help:norl: