mirror of
				https://github.com/folke/lazy.nvim.git
				synced 2025-11-04 00:11:06 +00:00 
			
		
		
		
	docs: migrating docs from readme
This commit is contained in:
		
					parent
					
						
							
								eec66ae9f7
							
						
					
				
			
			
				commit
				
					
						692ac7a301
					
				
			
		
					 15 changed files with 861 additions and 48 deletions
				
			
		
							
								
								
									
										95
									
								
								docs/spec/examples.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								docs/spec/examples.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,95 @@
 | 
			
		|||
# Examples
 | 
			
		||||
 | 
			
		||||
<!-- examples:start -->
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
return {
 | 
			
		||||
  -- the colorscheme should be available when starting Neovim
 | 
			
		||||
  {
 | 
			
		||||
    "folke/tokyonight.nvim",
 | 
			
		||||
    lazy = false, -- make sure we load this during startup if it is your main colorscheme
 | 
			
		||||
    priority = 1000, -- make sure to load this before all the other start plugins
 | 
			
		||||
    config = function()
 | 
			
		||||
      -- load the colorscheme here
 | 
			
		||||
      vim.cmd([[colorscheme tokyonight]])
 | 
			
		||||
    end,
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  -- I have a separate config.mappings file where I require which-key.
 | 
			
		||||
  -- With lazy the plugin will be automatically loaded when it is required somewhere
 | 
			
		||||
  { "folke/which-key.nvim", lazy = true },
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    "nvim-neorg/neorg",
 | 
			
		||||
    -- lazy-load on filetype
 | 
			
		||||
    ft = "norg",
 | 
			
		||||
    -- options for neorg. This will automatically call `require("neorg").setup(opts)`
 | 
			
		||||
    opts = {
 | 
			
		||||
      load = {
 | 
			
		||||
        ["core.defaults"] = {},
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    "dstein64/vim-startuptime",
 | 
			
		||||
    -- lazy-load on a command
 | 
			
		||||
    cmd = "StartupTime",
 | 
			
		||||
    -- init is called during startup. Configuration for vim plugins typically should be set in an init function
 | 
			
		||||
    init = function()
 | 
			
		||||
      vim.g.startuptime_tries = 10
 | 
			
		||||
    end,
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    "hrsh7th/nvim-cmp",
 | 
			
		||||
    -- load cmp on InsertEnter
 | 
			
		||||
    event = "InsertEnter",
 | 
			
		||||
    -- these dependencies will only be loaded when cmp loads
 | 
			
		||||
    -- dependencies are always lazy-loaded unless specified otherwise
 | 
			
		||||
    dependencies = {
 | 
			
		||||
      "hrsh7th/cmp-nvim-lsp",
 | 
			
		||||
      "hrsh7th/cmp-buffer",
 | 
			
		||||
    },
 | 
			
		||||
    config = function()
 | 
			
		||||
      -- ...
 | 
			
		||||
    end,
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  -- if some code requires a module from an unloaded plugin, it will be automatically loaded.
 | 
			
		||||
  -- So for api plugins like devicons, we can always set lazy=true
 | 
			
		||||
  { "nvim-tree/nvim-web-devicons", lazy = true },
 | 
			
		||||
 | 
			
		||||
  -- you can use the VeryLazy event for things that can
 | 
			
		||||
  -- load later and are not important for the initial UI
 | 
			
		||||
  { "stevearc/dressing.nvim", event = "VeryLazy" },
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    "Wansmer/treesj",
 | 
			
		||||
    keys = {
 | 
			
		||||
      { "J", "<cmd>TSJToggle<cr>", desc = "Join Toggle" },
 | 
			
		||||
    },
 | 
			
		||||
    opts = { use_default_keymaps = false, max_join_length = 150 },
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    "monaqa/dial.nvim",
 | 
			
		||||
    -- lazy-load on keys
 | 
			
		||||
    -- mode is `n` by default. For more advanced options, check the section on key mappings
 | 
			
		||||
    keys = { "<C-a>", { "<C-x>", mode = "n" } },
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  -- local plugins need to be explicitly configured with dir
 | 
			
		||||
  { dir = "~/projects/secret.nvim" },
 | 
			
		||||
 | 
			
		||||
  -- you can use a custom url to fetch a plugin
 | 
			
		||||
  { url = "git@github.com:folke/noice.nvim.git" },
 | 
			
		||||
 | 
			
		||||
  -- local plugins can also be configured with the dev option.
 | 
			
		||||
  -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub
 | 
			
		||||
  -- With the dev option, you can easily switch between the local and installed version of a plugin
 | 
			
		||||
  { "folke/noice.nvim", dev = true },
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<!-- examples:end -->
 | 
			
		||||
							
								
								
									
										35
									
								
								docs/spec/index.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								docs/spec/index.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
---
 | 
			
		||||
sidebar_position: 3
 | 
			
		||||
---
 | 
			
		||||
# 🔌 Plugin Spec
 | 
			
		||||
 | 
			
		||||
| Property         | Type                                                                                                                                | Description                                                                                                                                                                                                                                                                                                                                                                                                            |
 | 
			
		||||
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | 
			
		||||
| **[1]**          | `string?`                                                                                                                           | Short plugin url. Will be expanded using `config.git.url_format`                                                                                                                                                                                                                                                                                                                                                       |
 | 
			
		||||
| **dir**          | `string?`                                                                                                                           | A directory pointing to a local plugin                                                                                                                                                                                                                                                                                                                                                                                 |
 | 
			
		||||
| **url**          | `string?`                                                                                                                           | A custom git url where the plugin is hosted                                                                                                                                                                                                                                                                                                                                                                            |
 | 
			
		||||
| **name**         | `string?`                                                                                                                           | A custom name for the plugin used for the local plugin directory and as the display name                                                                                                                                                                                                                                                                                                                               |
 | 
			
		||||
| **dev**          | `boolean?`                                                                                                                          | When `true`, a local plugin directory will be used instead. See `config.dev`                                                                                                                                                                                                                                                                                                                                           |
 | 
			
		||||
| **lazy**         | `boolean?`                                                                                                                          | When `true`, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are `required`, or when one of the lazy-loading handlers triggers                                                                                                                                                                                                                         |
 | 
			
		||||
| **enabled**      | `boolean?` or `fun():boolean`                                                                                                       | When `false`, or if the `function` returns false, then this plugin will not be included in the spec                                                                                                                                                                                                                                                                                                                    |
 | 
			
		||||
| **cond**         | `boolean?` or `fun(LazyPlugin):boolean`                                                                                             | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example.                                                                                                                                                                                                                                                              |
 | 
			
		||||
| **dependencies** | `LazySpec[]`                                                                                                                        | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else.                                                                                                                                                                                 |
 | 
			
		||||
| **init**         | `fun(LazyPlugin)`                                                                                                                   | `init` functions are always executed during startup                                                                                                                                                                                                                                                                                                                                                                    |
 | 
			
		||||
| **opts**         | `table` or `fun(LazyPlugin, opts:table)`                                                                                            | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()`                                                                                                                                                                              |
 | 
			
		||||
| **config**       | `fun(LazyPlugin, opts:table)` or `true`                                                                                             | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`.                                            |
 | 
			
		||||
| **main**         | `string?`                                                                                                                           | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()`                                                                                                                                                                                                                                                                                   |
 | 
			
		||||
| **build**        | `fun(LazyPlugin)` or `string` or a list of build commands                                                                           | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. If it's a string it will be run as a shell command. When prefixed with `:` it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. |
 | 
			
		||||
| **branch**       | `string?`                                                                                                                           | Branch of the repository                                                                                                                                                                                                                                                                                                                                                                                               |
 | 
			
		||||
| **tag**          | `string?`                                                                                                                           | Tag of the repository                                                                                                                                                                                                                                                                                                                                                                                                  |
 | 
			
		||||
| **commit**       | `string?`                                                                                                                           | Commit of the repository                                                                                                                                                                                                                                                                                                                                                                                               |
 | 
			
		||||
| **version**      | `string?` or `false` to override the default                                                                                        | Version to use from the repository. Full [Semver](https://devhints.io/semver) ranges are supported                                                                                                                                                                                                                                                                                                                     |
 | 
			
		||||
| **pin**          | `boolean?`                                                                                                                          | When `true`, this plugin will not be included in updates                                                                                                                                                                                                                                                                                                                                                               |
 | 
			
		||||
| **submodules**   | `boolean?`                                                                                                                          | When false, git submodules will not be fetched. Defaults to `true`                                                                                                                                                                                                                                                                                                                                                     |
 | 
			
		||||
| **event**        | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` or `{event:string[]\|string, pattern?:string[]\|string}` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua`                                                                                                                                                                                                                                                                                                                      |
 | 
			
		||||
| **cmd**          | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]`                                                            | Lazy-load on command                                                                                                                                                                                                                                                                                                                                                                                                   |
 | 
			
		||||
| **ft**           | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]`                                                             | Lazy-load on filetype                                                                                                                                                                                                                                                                                                                                                                                                  |
 | 
			
		||||
| **keys**         | `string?` or `string[]` or `LazyKeysSpec[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[]`                     | Lazy-load on key mapping                                                                                                                                                                                                                                                                                                                                                                                               |
 | 
			
		||||
| **module**       | `false?`                                                                                                                            | Do not automatically load this Lua module when it's required somewhere                                                                                                                                                                                                                                                                                                                                                 |
 | 
			
		||||
| **priority**     | `number?`                                                                                                                           | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes.                                                                                                                                                                                                                                     |
 | 
			
		||||
| **optional**     | `boolean?`                                                                                                                          | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins                                                                                                                      |
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										57
									
								
								docs/spec/lazy_loading.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								docs/spec/lazy_loading.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
# Lazy Loading
 | 
			
		||||
 | 
			
		||||
**lazy.nvim** automagically lazy-loads Lua modules, so it is not needed to
 | 
			
		||||
specify `module=...` everywhere in your plugin specification. This means that if
 | 
			
		||||
you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a
 | 
			
		||||
module of plugin `A`, then plugin `A` will be loaded on demand as expected.
 | 
			
		||||
 | 
			
		||||
If you don't want this behavior for a certain plugin, you can specify that with `module=false`.
 | 
			
		||||
You can then manually load the plugin with `:Lazy load foobar.nvim`.
 | 
			
		||||
 | 
			
		||||
You can configure **lazy.nvim** to lazy-load all plugins by default with `config.defaults.lazy = true`.
 | 
			
		||||
 | 
			
		||||
Additionally, you can also lazy-load on **events**, **commands**,
 | 
			
		||||
**file types** and **key mappings**.
 | 
			
		||||
 | 
			
		||||
Plugins will be lazy-loaded when one of the following is `true`:
 | 
			
		||||
 | 
			
		||||
- The plugin only exists as a dependency in your spec
 | 
			
		||||
- It has an `event`, `cmd`, `ft` or `keys` key
 | 
			
		||||
- `config.defaults.lazy == true`
 | 
			
		||||
 | 
			
		||||
## 🌈 Colorschemes
 | 
			
		||||
 | 
			
		||||
Colorscheme plugins can be configured with `lazy=true`. The plugin will automagically load
 | 
			
		||||
when doing `colorscheme foobar`.
 | 
			
		||||
 | 
			
		||||
> **NOTE:** since **start** plugins can possibly change existing highlight groups,
 | 
			
		||||
> it's important to make sure that your main **colorscheme** is loaded first.
 | 
			
		||||
> To ensure this you can use the `priority=1000` field. **_(see the examples)_**
 | 
			
		||||
 | 
			
		||||
## ⌨️ Lazy Key Mappings
 | 
			
		||||
 | 
			
		||||
The `keys` property can be a `string` or `string[]` for simple normal-mode mappings, or it
 | 
			
		||||
can be a `LazyKeysSpec` table with the following key-value pairs:
 | 
			
		||||
 | 
			
		||||
- **[1]**: (`string`) lhs **_(required)_**
 | 
			
		||||
- **[2]**: (`string|fun()`) rhs **_(optional)_**
 | 
			
		||||
- **mode**: (`string|string[]`) mode **_(optional, defaults to `"n"`)_**
 | 
			
		||||
- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **_(optional)_**
 | 
			
		||||
- any other option valid for `vim.keymap.set`
 | 
			
		||||
 | 
			
		||||
Key mappings will load the plugin the first time they get executed.
 | 
			
		||||
 | 
			
		||||
When `[2]` is `nil`, then the real mapping has to be created by the `config()` function.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
-- Example for neo-tree.nvim
 | 
			
		||||
{
 | 
			
		||||
  "nvim-neo-tree/neo-tree.nvim",
 | 
			
		||||
    keys = {
 | 
			
		||||
      { "<leader>ft", "<cmd>Neotree toggle<cr>", desc = "NeoTree" },
 | 
			
		||||
    },
 | 
			
		||||
    config = function()
 | 
			
		||||
      require("neo-tree").setup()
 | 
			
		||||
    end,
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										24
									
								
								docs/spec/versioning.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								docs/spec/versioning.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
# Versioning
 | 
			
		||||
 | 
			
		||||
If you want to install a specific revision of a plugin, you can use `commit`,
 | 
			
		||||
`tag`, `branch`, `version`.
 | 
			
		||||
 | 
			
		||||
The `version` property supports [Semver](https://semver.org/) ranges.
 | 
			
		||||
 | 
			
		||||
:::tip
 | 
			
		||||
 | 
			
		||||
You can set `config.defaults.version = "*"` to install the latest stable
 | 
			
		||||
version of plugins that support Semver.
 | 
			
		||||
 | 
			
		||||
:::
 | 
			
		||||
 | 
			
		||||
## Examples
 | 
			
		||||
 | 
			
		||||
- `*`: latest stable version (this excludes pre-release versions)
 | 
			
		||||
- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc.
 | 
			
		||||
- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`.
 | 
			
		||||
- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`.
 | 
			
		||||
- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc.
 | 
			
		||||
- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc.
 | 
			
		||||
- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc.
 | 
			
		||||
- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue