PageSourceSearch

https://www.lazyvim.org/assets/js/14e32279.337a7a7e.js

js lazyvim.org collected 2026-10-03 21:24:44 UTC 18,868 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunklazyvim=self.webpackChunklazyvim||[]).push([[8335],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>f});var i=t(7294);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){s(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function o(e,n){if(null==e)return{};var t,i,s=function(e,n){if(null==e)return{};var t,i,s={},r=Object.keys(e);for(i=0;i<r.length;i++)t=r[i],n.indexOf(t)>=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)t=r[i],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var l=i.createContext({}),p=function(e){var n=i.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},c=function(e){var n=p(e.components);return i.createElement(l.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,s=e.mdxType,r=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(t),m=s,f=u["".concat(l,".").concat(m)]||u[m]||d[m]||r;return t?i.createElement(f,a(a({ref:n},c),{},{components:t})):i.createElement(f,a({ref:n},c))}));function f(e,n){var t=arguments,s=n&&n.mdxType;if("string"==typeof e||s){var r=t.length,a=new Array(r);a[0]=m;var o={};for(var l in n)hasOwnProperty.call(n,l)&&(o[l]=n[l]);o.originalType=e,o[u]="string"==typeof e?e:s,a[1]=o;for(var p=2;p<r;p++)a[p]=t[p];return i.createElement.apply(null,a)}return i.createElement.apply(null,t)}m.displayName="MDXCreateElement"},5162:(e,n,t)=>{t.d(n,{Z:()=>a});var i=t(7294),s=t(6010);const r="tabItem_Ymn6";function a(e){let{children:n,hidden:t,className:a}=e;return i.createElement("div",{role:"tabpanel",className:(0,s.Z)(r,a),hidden:t},n)}},4866:(e,n,t)=>{t.d(n,{Z:()=>x});var i=t(7462),s=t(7294),r=t(6010),a=t(2466),o=t(6550),l=t(1980),p=t(7392),c=t(12);function u(e){return function(e){return s.Children.map(e,(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:n,label:t,attributes:i,default:s}}=e;return{value:n,label:t,attributes:i,default:s}}))}function d(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??u(t);return function(e){const n=(0,p.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function m(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const i=(0,o.k6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l._X)(r),(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(i.location.search);n.set(r,e),i.replace({...i.location,search:n.toString()})}),[r,i])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:i}
1=e,r=d(e),[a,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!m({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=t.find((e=>e.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:r}))),[l,p]=f({queryString:t,groupId:i}),[u,b]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,r]=(0,c.Nk)(t);return[i,(0,s.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:i}),g=(()=>{const e=l??u;return m({value:e,tabValues:r})?e:null})();(0,s.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),p(e),b(e)}),[p,b,r]),tabValues:r}}var g=t(2389);const h="tabList__CuJ",v="tabItem_LNqP";function y(e){let{className:n,block:t,selectedValue:o,selectValue:l,tabValues:p}=e;const c=[],{blockElementScrollPositionUntilNextRender:u}=(0,a.o5)(),d=e=>{const n=e.currentTarget,t=c.indexOf(n),i=p[t].value;i!==o&&(u(n),l(i))},m=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return s.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":t},n)},p.map((e=>{let{value:n,label:t,attributes:a}=e;return s.createElement("li",(0,i.Z)({role:"tab",tabIndex:o===n?0:-1,"aria-selected":o===n,key:n,ref:e=>c.push(e),onKeyDown:m,onClick:d},a,{className:(0,r.Z)("tabs__item",v,a?.className,{"tabs__item--active":o===n})}),t??n)})))}function k(e){let{lazy:n,children:t,selectedValue:i}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===i));return e?(0,s.cloneElement)(e,{className:"margin-top--md"}):null}return s.createElement("div",{className:"margin-top--md"},r.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==i}))))}function _(e){const n=b(e);return s.createElement("div",{className:(0,r.Z)("tabs-container",h)},s.createElement(y,(0,i.Z)({},e,n)),s.createElement(k,(0,i.Z)({},e,n)))}function x(e){const n=(0,g.Z)();return s.createElement(_,(0,i.Z)({key:String(n)},e))}},7207:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>u});var i=t(7462),s=(t(7294),t(3905)),r=t(4866),a=t(5162);const o={},l="Mini-snippets",p={unversionedId:"extras/coding/mini-snippets",id:"extras/coding/mini-snippets",title:"Mini-snippets",description:"You can enable the extra with the :LazyExtras command.",source:"@site/docs/extras/coding/mini-snippets.md",sourceDirName:"extras/coding",slug:"/extras/coding/mini-snippets",permalink:"/extras/coding/mini-snippets",draft:!1,editUrl:"https://github.com/LazyVim/lazyvim.github.io/tree/main/docs/extras/coding/mini-snippets.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Mini-comment",permalink:"/extras/coding/mini-comment"},next:{title:"Mini-surround",permalink:"/extras/coding/mini-surround"}},c={},u=[{value:"Options",id:"options",level:3},{value:"mini.snippets",id:"minisnippets",level:2},{value:"cmp-mini-snippets",id:"cmp-mini-snippets",level:2},{value:"nvim-cmp <em>(optional)</em>",id:"nvim-cmp-optional",level:2},{value:"blink.cmp <em>(optional)</em>",id:"blinkcmp-optional",level:2}],d={toc:u};
1function m(e){let{components:n,...t}=e;return(0,s.kt)("wrapper",(0,i.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"mini-snippets"},(0,s.kt)("inlineCode",{parentName:"h1"},"Mini-snippets")),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"You can enable the extra with the ",(0,s.kt)("inlineCode",{parentName:"p"},":LazyExtras")," command.\nPlugins marked as optional will only be configured if they are installed.")),(0,s.kt)("h3",{id:"options"},"Options"),(0,s.kt)("p",null,"Additional options for this extra can be configured in your ",(0,s.kt)("a",{parentName:"p",href:"/configuration/general#options"},"lua/config/options.lua")," file:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua",metastring:'title="lua/config/options.lua"',title:'"lua/config/options.lua"'},'-- Set to `false` to prevent "non-lsp snippets"" from appearing inside completion windows\n-- Motivation: Less clutter in completion windows and a more direct usage of snippets\nvim.g.lazyvim_mini_snippets_in_completion = true\n\n-- NOTE: Please also read:\n-- https://github.com/nvim-mini/mini.nvim/blob/main/readmes/mini-snippets.md#expand\n-- :h MiniSnippets-session\n\n-- Example override for your own config:\n--[[\nreturn {\n{\n"nvim-mini/mini.snippets",\nopts = function(_, opts)\n-- By default, for opts.snippets, the extra for mini.snippets only adds gen_loader.from_lang()\n-- This provides a sensible quickstart, integrating with friendly-snippets\n-- and your own language-specific snippets\n--\n-- In order to change opts.snippets, replace the entire table inside your own opts\n\nlocal snippets, config_path = require("mini.snippets"), vim.fn.stdpath("config")\n\nopts.snippets = { -- override opts.snippets provided by extra...\n-- Load custom file with global snippets first (order matters)\nsnippets.gen_loader.from_file(config_path .. "/snippets/global.json"),\n\n-- Load snippets based on current language by reading files from\n-- "snippets/" subdirectories from \'runtimepath\' directories.\nsnippets.gen_loader.from_lang(), -- this is the default in the extra...\n}\nend,\n},\n}\n--]]\n')),(0,s.kt)("p",null,"Below you can find a list of included plugins and their default settings."),(0,s.kt)("admonition",{type:"caution"},(0,s.kt)("p",{parentName:"admonition"},"You don't need to copy the default settings to your config.\nThey are only shown here for reference.")),(0,s.kt)("h2",{id:"minisnippets"},(0,s.kt)("a",{parentName:"h2",href:"https://github.com/nvim-mini/mini.snippets"},"mini.snippets")),(0,s.kt)(r.Z,{mdxType:"Tabs"},(0,s.kt)(a.Z,{value:"opts",label:"Options",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'opts = function()\n  ---@diagnostic disable-next-line: duplicate-set-field\n  LazyVim.cmp.actions.snippet_stop = function() end -- by design, <esc> should not stop the session!\n  ---@diagnostic disable-next-line: duplicate-set-field\n  LazyVim.cmp.actions.snippet_forward = function()\n    return jump("next")\n  end\n\n  local mini_snippets = require("mini.snippets")\n  return {\n    snippets = { mini_snippets.gen_loader.from_lang() },\n\n    -- Following the behavior of vim.snippets,\n    -- the intended usage of <esc> is to be able to temporarily exit into normal mode for quick edits.\n    --\n    -- If you\'d rather stop the snippet on <esc>, activate the line below in your own config:\n    -- mappings = { stop = "<esc>" }, -- <c-c> by default, see :h MiniSnippets-session\n\n    expand = {\n      select = function(snippets, insert)\n        -- Close completion window on snippet select - vim.ui.select\n        -- Needed to remove virtual text for fzf-lua and telescope, but not for mini.pick...\n        local select = expand_select_override or MiniSnippets.default_select\n        select(snippets, insert)\n      end,\n    },\n  }\nend\n'))),(0,s.kt)(a.Z,{value:"code",label:"Full Spec",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "nvim-mini/mini.snippets",\n  event = "InsertEnter", -- don\'t depend on other plugins to load...\n  dependencies = "rafamadriz/friendly-snippets",\n  opts = function()\n    ---@diagnostic disable-next-line: duplicate-set-field\n    LazyVim.cmp.actions.snippet_stop = function() end -- by design, <esc> should not stop the session!\n    ---@diagnostic disable-next-line: duplicate-set-field\n    LazyVim.cmp.actions.snippet_forward = function()\n      return jump("next")\n    end\n\n    local mini_snippets = require("mini.snippets")\n    return {\n      snippets = { mini_snippets.gen_loader.from_lang() },\n\n      -- Following the behavior of vim.snippets,\n      -- the intended usage of <esc> is to be able to temporarily exit into normal mode for quick edits.\
1n      --\n      -- If you\'d rather stop the snippet on <esc>, activate the line below in your own config:\n      -- mappings = { stop = "<esc>" }, -- <c-c> by default, see :h MiniSnippets-session\n\n      expand = {\n        select = function(snippets, insert)\n          -- Close completion window on snippet select - vim.ui.select\n          -- Needed to remove virtual text for fzf-lua and telescope, but not for mini.pick...\n          local select = expand_select_override or MiniSnippets.default_select\n          select(snippets, insert)\n        end,\n      },\n    }\n  end,\n}\n')))),(0,s.kt)("h2",{id:"cmp-mini-snippets"},(0,s.kt)("a",{parentName:"h2",href:"https://github.com/abeldekat/cmp-mini-snippets"},"cmp-mini-snippets")),(0,s.kt)(r.Z,{mdxType:"Tabs"},(0,s.kt)(a.Z,{value:"opts",label:"Options",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},"opts = nil\n"))),(0,s.kt)(a.Z,{value:"code",label:"Full Spec",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'{ "abeldekat/cmp-mini-snippets" }\n')))),(0,s.kt)("h2",{id:"nvim-cmp-optional"},(0,s.kt)("a",{parentName:"h2",href:"https://github.com/hrsh7th/nvim-cmp"},"nvim-cmp")," ",(0,s.kt)("em",{parentName:"h2"},"(optional)")),(0,s.kt)("p",null," nvim-cmp integration"),(0,s.kt)(r.Z,{mdxType:"Tabs"},(0,s.kt)(a.Z,{value:"opts",label:"Options",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'opts = function(_, opts)\n  local cmp = require("cmp")\n  local cmp_config = require("cmp.config")\n\n  opts.snippet = {\n    expand = function(args)\n      expand_from_lsp(args.body)\n      cmp.resubscribe({ "TextChangedI", "TextChangedP" })\n      cmp_config.set_onetime({ sources = {} })\n    end,\n  }\n\n  if include_in_completion then\n    table.insert(opts.sources, { name = "mini_snippets" })\n  else\n    expand_select_override = function(snippets, insert)\n      -- stylua: ignore\n      if cmp.visible() then cmp.close() end\n      MiniSnippets.default_select(snippets, insert)\n    end\n  end\nend\n'))),(0,s.kt)(a.Z,{value:"code",label:"Full Spec",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "hrsh7th/nvim-cmp",\n  optional = true,\n  dependencies = include_in_completion and { "abeldekat/cmp-mini-snippets" } or nil,\n  opts = function(_, opts)\n    local cmp = require("cmp")\n    local cmp_config = require("cmp.config")\n\n    opts.snippet = {\n      expand = function(args)\n        expand_from_lsp(args.body)\n        cmp.resubscribe({ "TextChangedI", "TextChangedP" })\n        cmp_config.set_onetime({ sources = {} })\n      end,\n    }\n\n    if include_in_completion then\n      table.insert(opts.sources, { name = "mini_snippets" })\n    else\n      expand_select_override = function(snippets, insert)\n        -- stylua: ignore\n        if cmp.visible() then cmp.close() end\n        MiniSnippets.default_select(snippets, insert)\n      end\n    end\n  end,\n  -- stylua: ignore\n  -- counterpart to <tab> defined in cmp.mappings\n  keys = include_in_completion and { { "<s-tab>", function() jump("prev") end, mode = "i" } } or nil,\n}\n')))),(0,s.kt)("h2",{id:"blinkcmp-optional"},(0,s.kt)("a",{parentName:"h2",href:"https://github.com/saghen/blink.cmp"},"blink.cmp")," ",(0,s.kt)("em",{parentName:"h2"},"(optional)")),(0,s.kt)("p",null," blink.cmp integration"),(0,s.kt)(r.Z,{mdxType:"Tabs"},(0,s.kt)(a.Z,{value:"opts",label:"Options",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'opts = function(_, opts)\n  -- Return early\n  if include_in_completion then\n    opts.snippets = { preset = "mini_snippets" }\n    return\n  end\n\n  -- Standalone --\n  local blink = require("blink.cmp")\n  expand_select_override = function(snippets, insert)\n    -- Schedule, otherwise blink\'s virtual text is not removed on vim.ui.select\n    blink.cancel()\n    vim.schedule(function()\n      MiniSnippets.default_select(snippets, insert)\n    end)\n  end\n  --\n  -- Blink performs a require on blink.cmp.sources.snippets.default\n  -- By removing the source, that default engine will not be used\n  opts.sources.default = vim.tbl_filter(function(source)\n    return source ~= "snippets"\n  end, opts.sources.default)\n  opts.snippets = { -- need to repeat blink\'s preset here\n    expand = function(snippet)\n      expand_from_lsp(snippet)\n      blink.resubscribe()\n    end,\n    active = function()\n      return MiniSnippets.session.get(false) ~= nil\n    end,\n    jump = function(direction)\n      jump(direction == -1 and "prev" or "next")\n    end,\n  }\nend\n'))),(0,s.kt)(a.Z,{value:"code",label:"Full Spec",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "saghen/blink.cmp",\n  optional = true,\n  opts = function(_, opts)\n    -- Return early\n    if include_in_completion then\n      opts.snippets = { preset = "mini_snippets" }\n      return\n    end\n\n    -- Standalone --\n    local blink = require("blink.cmp")\n    expand_select_override = function(snippets, insert)\n      -- Sc
1hedule, otherwise blink\'s virtual text is not removed on vim.ui.select\n      blink.cancel()\n      vim.schedule(function()\n        MiniSnippets.default_select(snippets, insert)\n      end)\n    end\n    --\n    -- Blink performs a require on blink.cmp.sources.snippets.default\n    -- By removing the source, that default engine will not be used\n    opts.sources.default = vim.tbl_filter(function(source)\n      return source ~= "snippets"\n    end, opts.sources.default)\n    opts.snippets = { -- need to repeat blink\'s preset here\n      expand = function(snippet)\n        expand_from_lsp(snippet)\n        blink.resubscribe()\n      end,\n      active = function()\n        return MiniSnippets.session.get(false) ~= nil\n      end,\n      jump = function(direction)\n        jump(direction == -1 and "prev" or "next")\n      end,\n    }\n  end,\n}\n')))))}m.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.