PageSourceSearch

https://www.lazyvim.org/assets/js/5ef416c9.32a5ded8.js

js lazyvim.org collected 2026-10-03 21:21:55 UTC 8,708 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunklazyvim=self.webpackChunklazyvim||[]).push([[1159],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>f});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(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 o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,i,r=function(e,n){if(null==e)return{};var t,i,r={},a=Object.keys(e);for(i=0;i<a.length;i++)t=a[i],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)t=a[i],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=i.createContext({}),p=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=p(e.components);return i.createElement(s.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},d=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(t),d=r,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return t?i.createElement(f,o(o({ref:n},c),{},{components:t})):i.createElement(f,o({ref:n},c))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,o=new Array(a);o[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:r,o[1]=l;for(var p=2;p<a;p++)o[p]=t[p];return i.createElement.apply(null,o)}return i.createElement.apply(null,t)}d.displayName="MDXCreateElement"},1864:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var i=t(7462),r=(t(7294),t(3905));const a={sidebar_position:6},o="Recipes",l={unversionedId:"configuration/recipes",id:"configuration/recipes",title:"Recipes",description:"Add a nvim-cmp source",source:"@site/docs/configuration/recipes.md",sourceDirName:"configuration",slug:"/configuration/recipes",permalink:"/configuration/recipes",draft:!1,editUrl:"https://github.com/LazyVim/lazyvim.github.io/tree/main/docs/configuration/recipes.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Examples",permalink:"/configuration/examples"},next:{title:"Tips",permalink:"/configuration/tips"}},s={},p=[{value:"Add a <code>nvim-cmp</code> source",id:"add-a-nvim-cmp-source",level:2},{value:"Supertab",id:"supertab",level:2},{value:"Change surround mappings",id:"change-surround-mappings",level:2},{value:"Make TokyoNight Transparent",id:"make-tokyonight-transparent",level:2},{value:"Fix clangd offset encoding",id:"fix-clangd-offset-encoding",level:2},{value:"Use Eslint for fix on save and prettier for formatting",id:"use-eslint-for-fix-on-save-and-prettier-for-formatting",level:2},{value:"Add Eslint and use it for formatting",id:"add-eslint-and-use-it-for-formatting",level:2}],c={toc:p};
1function u(e){let{components:n,...t}=e;return(0,r.kt)("wrapper",(0,i.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"recipes"},"Recipes"),(0,r.kt)("h2",{id:"add-a-nvim-cmp-source"},"Add a ",(0,r.kt)("inlineCode",{parentName:"h2"},"nvim-cmp")," source"),(0,r.kt)("p",null,"override nvim-cmp and add cmp-emoji"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "hrsh7th/nvim-cmp",\n  dependencies = { "hrsh7th/cmp-emoji" },\n  ---@param opts cmp.ConfigSchema\n  opts = function(_, opts)\n    table.insert(opts.sources, { name = "emoji" })\n  end,\n}\n')),(0,r.kt)("h2",{id:"supertab"},"Supertab"),(0,r.kt)("p",null,"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"<tab>")," for completion and snippets (supertab)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "hrsh7th/nvim-cmp",\n  ---@param opts cmp.ConfigSchema\n  opts = function(_, opts)\n    local has_words_before = function()\n      unpack = unpack or table.unpack\n      local line, col = unpack(vim.api.nvim_win_get_cursor(0))\n      return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil\n    end\n\n    local cmp = require("cmp")\n\n    opts.mapping = vim.tbl_extend("force", opts.mapping, {\n      ["<Tab>"] = cmp.mapping(function(fallback)\n        if cmp.visible() then\n          -- You could replace select_next_item() with confirm({ select = true }) to get VS Code autocompletion behavior\n          cmp.select_next_item()\n        elseif vim.snippet.active({ direction = 1 }) then\n          vim.schedule(function()\n            vim.snippet.jump(1)\n          end)\n        elseif has_words_before() then\n          cmp.complete()\n        else\n          fallback()\n        end\n      end, { "i", "s" }),\n      ["<S-Tab>"] = cmp.mapping(function(fallback)\n        if cmp.visible() then\n          cmp.select_prev_item()\n        elseif vim.snippet.active({ direction = -1 }) then\n          vim.schedule(function()\n            vim.snippet.jump(-1)\n          end)\n        else\n          fallback()\n        end\n      end, { "i", "s" }),\n    })\n  end,\n}\n')),(0,r.kt)("h2",{id:"change-surround-mappings"},"Change surround mappings"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "echasnovski/mini.surround",\n  opts = {\n    mappings = {\n      add = "gsa",\n      delete = "gsd",\n      find = "gsf",\n      find_left = "gsF",\n      highlight = "gsh",\n      replace = "gsr",\n      update_n_lines = "gsn",\n    },\n  },\n}\n')),(0,r.kt)("h2",{id:"make-tokyonight-transparent"},"Make TokyoNight Transparent"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "folke/tokyonight.nvim",\n  opts = {\n    transparent = true,\n    styles = {\n      sidebars = "transparent",\n      floats = "transparent",\n    },\n  },\n}\n')),(0,r.kt)("h2",{id:"fix-clangd-offset-encoding"},"Fix clangd offset encoding"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "neovim/nvim-lspconfig",\n  opts = {\n    setup = {\n      clangd = function(_, opts)\n        opts.capabilities.offsetEncoding = { "utf-16" }\n      end,\n    },\n  },\n}\n')),(0,r.kt)("h2",{id:"use-eslint-for-fix-on-save-and-prettier-for-formatting"},"Use Eslint for fix on save and prettier for formatting"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://prettier.io/docs/en/integrating-with-linters.html"},"recommended")," setup to\nintegrate prettier with linters is to ",(0,r.kt)("strong",{parentName:"p"},"not")," integrate it with eslint.\nFor this config, we have two extras, to enable eslint fix on save and enable the prettier\nformatter with null-ls."),(0,r.kt)("p",null,"Add the below to your ",(0,r.kt)("inlineCode",{parentName:"p"},"lua/config/lazy.lua")," file"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  { import = "lazyvim.plugins.extras.linting.eslint" },\n  { import = "lazyvim.plugins.extras.formatting.prettier" },\n}\n')),(0,r.kt)("h2",{id:"add-eslint-and-use-it-for-formatting"},"Add Eslint and use it for formatting"),(0,r.kt)("p",null,"If your project is using eslint with ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/prettier/eslint-plugin-
1prettier"},"eslint-plugin-prettier"),",\nthen this will automatically fix eslint errors and format with prettier on save.\nImportant: make sure not to add prettier to null-ls, otherwise this won't work!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-lua"},'{\n  "neovim/nvim-lspconfig",\n  opts = {\n    servers = { eslint = {} },\n    setup = {\n      eslint = function()\n        require("lazyvim.util").lsp.on_attach(function(client)\n          if client.name == "eslint" then\n            client.server_capabilities.documentFormattingProvider = true\n          elseif client.name == "tsserver" then\n            client.server_capabilities.documentFormattingProvider = false\n          end\n        end)\n      end,\n    },\n  },\n}\n')))}u.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.