diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json
index 538e599a..6509ffcb 100644
--- a/.github/.release-please-manifest.json
+++ b/.github/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "15.14.0"
+ ".": "15.15.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f5e25695..9c2cdedb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,45 @@
# Changelog
+## [15.15.0](https://github.com/LazyVim/LazyVim/compare/v15.14.0...v15.15.0) (2026-04-02)
+
+
+### Features
+
+* **biome:** enable biome lsp for linting ([b2830cf](https://github.com/LazyVim/LazyVim/commit/b2830cfcc5c9c09ebbf9545beb3947a55ce89dbd))
+* **biome:** move biome extra from formatting.biome -> lang.typescript.biome ([242f098](https://github.com/LazyVim/LazyVim/commit/242f0983de9fdb70f0d82057a8039e32bc171764))
+* **lazydev:** make lspconfig types available on word `lspconfig.settings` ([36f5947](https://github.com/LazyVim/LazyVim/commit/36f594716bcb0bec84a05a6c55f702134d2e89c3))
+* **lsp:** auto add organizeImport keymaps for LSPs that support it ([e54689e](https://github.com/LazyVim/LazyVim/commit/e54689ebdc5458cb30f4a48b954c710bb381cd01))
+* **oxc:** added oxc extra for oxfmt and oxlint ([4e9eac5](https://github.com/LazyVim/LazyVim/commit/4e9eac57aba1ea575ef008a503cba8327257e4a4))
+* **sidekick:** ctrl+. focuses sidekick, but when already inside sidekick, hides it ([50159fe](https://github.com/LazyVim/LazyVim/commit/50159fe344d93329a569cee136c0323e48b0d3da))
+* **typescript:** set `vim.g.lazyvim_ts_lsp = "tsgo"` to use the much faster experimental lsp server ([e6f26f0](https://github.com/LazyVim/LazyVim/commit/e6f26f0f23e9cb4c6bcc351b06474f4863319aff))
+* **typescript:** split typescript extra in main, vtsls and tsgo ([9029d92](https://github.com/LazyVim/LazyVim/commit/9029d928d2f7b7f76f132b618d2931499c9b6eb9))
+
+
+### Bug Fixes
+
+* **biome:** added recommendation when root has biome config file ([ad25b31](https://github.com/LazyVim/LazyVim/commit/ad25b31e512892ca51a1fa3ffa96d1375c391039))
+* **biome:** biome mason install is no longer needed ([5450006](https://github.com/LazyVim/LazyVim/commit/5450006ccdd7df341f7f60dded58ea4a87aa9c15))
+* **biome:** use biome-check in conform that also fixes linting issues and sorts imports ([954d874](https://github.com/LazyVim/LazyVim/commit/954d8746e5cf1266d93cf4210c00c1506f20423b))
+* **lsp:** sort server names before setting keymaps ([6d0da34](https://github.com/LazyVim/LazyVim/commit/6d0da34de9c4a82170e3359d4e7853bf89a557b3))
+* **oxc:** added `fixKind = "all"` ([85afbbc](https://github.com/LazyVim/LazyVim/commit/85afbbc94bb45891799a4851b2edf753b51f18b0))
+* **r:** recommend for *.qmd instead of *qmd files ([3b3d649](https://github.com/LazyVim/LazyVim/commit/3b3d6493332798674fb7b82aea600bab18eaf311))
+* **terminal:** use Snacks.terminal.focus() for <C-/> mapping ([96f4f18](https://github.com/LazyVim/LazyVim/commit/96f4f18d7d81c786ac0df5723bc7aca058bf2165)), closes [#7048](https://github.com/LazyVim/LazyVim/issues/7048)
+* **treesitter:** `nvim-treesitter` on longer support nvim-0.11, so pin when needed. Fixes [#7092](https://github.com/LazyVim/LazyVim/issues/7092) ([ef272ff](https://github.com/LazyVim/LazyVim/commit/ef272ff7cc9b53d48baf6544618b5923d65c0282))
+* **tsgo:** disable inlayHints.functionLikeReturnTypes by default. Too noisy ([8bcb620](https://github.com/LazyVim/LazyVim/commit/8bcb6208021bd4e4257de64c9598c6b78688be28))
+* **tsgo:** remove some noisy inlay hints ([d07070b](https://github.com/LazyVim/LazyVim/commit/d07070bf2ff83ae513097d02d71460920af85a91))
+* **typescript:** remove keymaps for non-existing code actions ([53f4eab](https://github.com/LazyVim/LazyVim/commit/53f4eabd7723faba2d7c14afe53226d8c18bf16c))
+* **util.plugin:** single imports for extras ([1b4be53](https://github.com/LazyVim/LazyVim/commit/1b4be534f1d8959480ba1f622a457654bd737ce5))
+
+
+### Performance Improvements
+
+* **extras:** never load nested extras ([8764dfb](https://github.com/LazyVim/LazyVim/commit/8764dfbc8fcb8923397153eb3a2cfcac7ea988f1))
+
+
+### Reverts
+
+* **lsp:** revert changes for [#6456](https://github.com/LazyVim/LazyVim/issues/6456). Closes [#6779](https://github.com/LazyVim/LazyVim/issues/6779) ([d0fe8c8](https://github.com/LazyVim/LazyVim/commit/d0fe8c896f4dca003e8d56e2091ee5ec7da7af75))
+
## [15.14.0](https://github.com/LazyVim/LazyVim/compare/v15.13.0...v15.14.0) (2026-03-01)
diff --git a/README-FA.md b/README-FA.md
new file mode 100644
index 00000000..95876d74
--- /dev/null
+++ b/README-FA.md
@@ -0,0 +1,203 @@
+
+
+

+
+
+
+
+
+
+
+
+<<<<<<< HEAD
+
+این پیکربندی با نام LazyVim، که قدرت گرفته شده از Neovim هست [💤 lazy.nvim](https://github.com/folke/lazy.nvim)، تا سفارشی سازی و توسعه پیکربندی را برای شما آسان تر کند.
+به جای اینکه بخواهید بین شروع از صفر یا استفاده از یک توزیع از قبل ساخته شده انتخاب کنید، LazyVim بهترین هر دو جهان را به شما پیشنهاد میدهد - انعطاف اینکه پیکربندی را طبق نیازتان تغییر بدین، همراه با سادگی تنظیمات از قبل پیکربندی شده.
+=======
+LazyVim is a Neovim setup powered by [💤 lazy.nvim](https://github.com/folke/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.
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
+
+
+
+
+
+## ✨ ویژگی ها
+
+<<<<<<< HEAD
+- 🔥 تبدیل Neovim به یک IDE کامل
+- 💤 اختصاصی کردن و گسترش پیکربندی به سادگی با [lazy.nvim](https://github.com/folke/lazy.nvim)
+- 🚀 بسیار سریع
+- 🧹 تنظیمات پیش فرض منطقی برای (خودکارسازی ها) options, autocmds (گزینه ها) و keymaps (کلیدهای میانبر)
+- 📦 همراه با تعداد زیادی از پلاگین های از پیش پیکربندی شده و آماده استفاده.
+
+## ⚡️ الزامات
+
+- Neovim >= **0.11.2** ( باشد **LuaJIT** باید ساخته شده با )
+- Git >= **2.19.0** ( های جزئی clone برای پشتیبانی از)
+- فونت [Nerd Font](https://www.nerdfonts.com/) **_(اختیاری)_**
+- یک کامپایلر C: برای اطلاعات بیشتر راجب nvim-treesittere، [اینجا](https://github.com/nvim-treesitter/nvim-treesitter#requirements)را ببیند.
+
+## 🚀 شروع به کار
+
+شما می توانید یک قالب اولیه برای شروع LazyVim [اینجا](https://github.com/LazyVim/starter) پیدا کنید.
+=======
+- 🔥 Transform your Neovim into a full-fledged IDE
+- 💤 Easily customize and extend your config with [lazy.nvim](https://github.com/folke/lazy.nvim)
+- 🚀 بسیار سریع
+- 🧹 Sane default settings for options, autocmds, and keymaps
+- 📦 Comes with a wealth of plugins pre-configured and ready to use
+
+## ⚡️ Requirements
+
+- Neovim >= **0.11.2** (needs to be built with **LuaJIT**)
+- Git >= **2.19.0** (for partial clones support)
+- a [Nerd Font](https://www.nerdfonts.com/) **_(optional)_**
+- a **C** compiler for `nvim-treesitter`. See [here](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
+
+## 🚀 شروع به کار
+
+You can find a starter template for **LazyVim** [here](https://github.com/LazyVim/starter)
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
+
+با داکر امتحان کنید.
+
+```sh
+docker run -w /root -it --rm alpine:edge sh -uelic '
+ apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
+ git clone https://github.com/LazyVim/starter ~/.config/nvim
+ cd ~/.config/nvim
+ nvim
+'
+```
+
+
+
+<<<<<<< HEAD
+نصب LazyVim Starter
+=======
+Install the LazyVim Starter
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
+
+- یک بک آپ از فایل های neovim خود بگیرید.
+
+ ```sh
+ mv ~/.config/nvim ~/.config/nvim.bak
+ mv ~/.local/share/nvim ~/.local/share/nvim.bak
+ ```
+
+<<<<<<< HEAD
+- کلون کردن starter
+=======
+- Clone the starter
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
+
+ ```sh
+ git clone https://github.com/LazyVim/starter ~/.config/nvim
+ ```
+
+- پوشه .git را حذف کنید، تا بتوانید repo خودتان را بعدا اضافه کنید.
+
+ ```sh
+ rm -rf ~/.config/nvim/.git
+ ```
+
+- Neovim را شروع کنید
+
+ ```sh
+ nvim
+ ```
+<<<<<<< HEAD
+برای نحوهی سفارشیسازی **LazyVim** به توضیحات موجود در فایلها مراجعه کنید.
+
+
+
+
+---
+
+
+یک کتاب بسیار پرمحتوا که توسط [@dusty-phillips](https://github.com/dusty-phillips) نوشته شده است به نام [LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes) که به صورت آنلاین در دسترس است.
+
+
+## 📂 ساختار فایل
+
+فایل های داخل پیکربندی به صورت خودکار در زمان مناسب بارگذاری می شوند، شما نیاز نیست که به صورت دستی بارگذاری کنید.
+در LazyVim یک مجوعه ای از فایل های پیکربندی پیش فرض وجود دارد، که قبل از فایل های شما بارگذاری می شوند. [اینجا](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config) را ببینید.
+
+
+شما می توانید پلاگین های اختصاصی خودتان در `lua/plugins/` اضافه کنید. تمام فایل ها در آنجا به صورت خودکار توسط [lazy.nvim](https://github.com/folke/lazy.nvim) بارگذاری می شوند.
+=======
+به
+ Refer to the comments in the files on how to customize **LazyVim**.
+
+
+
+---
+
+[@dusty-phillips](https://github.com/dusty-phillips) یک کتاب بسیار پرمحتوا که توسط
+[LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes)
+نوشته شده که به صورت آنلاین در دسترس است.
+
+## 📂 ساختار فایل
+
+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](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config)
+
+You can add your custom plugin specs under `lua/plugins/`. All files there
+will be automatically loaded by [lazy.nvim](https://github.com/folke/lazy.nvim)
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
+
+
+~/.config/nvim
+├── lua
+│ ├── config
+│ │ ├── autocmds.lua
+│ │ ├── keymaps.lua
+│ │ ├── lazy.lua
+│ │ └── options.lua
+│ └── plugins
+│ ├── spec1.lua
+│ ├── **
+│ └── spec2.lua
+└── init.lua
+
+
+## ⚙️ پیکربندی
+<<<<<<< HEAD
+رجوع کنید به [اسناد](https://lazyvim.github.io)
+=======
+رجوع کنید به [docs](https://lazyvim.github.io)
+>>>>>>> d1cdedb5 (making the some changes in Farsi)
diff --git a/doc/LazyVim.txt b/doc/LazyVim.txt
index 1288f75d..7802ea89 100644
--- a/doc/LazyVim.txt
+++ b/doc/LazyVim.txt
@@ -1,4 +1,5 @@
*LazyVim.txt* LazyVim docs
+ For Neovim Last change: 2026 April 22
==============================================================================
Table of Contents *LazyVim-table-of-contents*
@@ -78,22 +79,26 @@ Try it with Docker ~
Install the LazyVim Starter ~
- Make a backup of your current Neovim files:
- >sh
+
+>sh
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
- <
+<
- Clone the starter
- >sh
+
+>sh
git clone https://github.com/LazyVim/starter ~/.config/nvim
- <
+<
- Remove the `.git` folder, so you can add it to your own repo later
- >sh
+
+>sh
rm -rf ~/.config/nvim/.git
- <
+<
- Start Neovim!
- >sh
+
+>sh
nvim
- <
+<
Refer to the comments in the files on how to customize **LazyVim**.
------------------------------------------------------------------------------
diff --git a/lua/lazyvim/config/init.lua b/lua/lazyvim/config/init.lua
index 5a4020b6..62d0b8a5 100644
--- a/lua/lazyvim/config/init.lua
+++ b/lua/lazyvim/config/init.lua
@@ -3,7 +3,7 @@ _G.LazyVim = require("lazyvim.util")
---@class LazyVimConfig: LazyVimOptions
local M = {}
-M.version = "15.14.0" -- x-release-please-version
+M.version = "15.15.0" -- x-release-please-version
LazyVim.config = M
---@class LazyVimOptions
diff --git a/lua/lazyvim/config/keymaps.lua b/lua/lazyvim/config/keymaps.lua
index 05d07a21..9651e4e6 100644
--- a/lua/lazyvim/config/keymaps.lua
+++ b/lua/lazyvim/config/keymaps.lua
@@ -189,8 +189,8 @@ map("n", "L", function() LazyVim.news.changelog() end, { desc = "LazyVim
-- floating terminal
map("n", "fT", function() Snacks.terminal() end, { desc = "Terminal (cwd)" })
map("n", "ft", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" })
-map({"n","t"}, "",function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" })
-map({"n","t"}, "",function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "which_key_ignore" })
+map({"n","t"}, "",function() Snacks.terminal.focus(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" })
+map({"n","t"}, "",function() Snacks.terminal.focus(nil, { cwd = LazyVim.root() }) end, { desc = "which_key_ignore" })
-- windows
map("n", "-", "s", { desc = "Split Window Below", remap = true })
diff --git a/lua/lazyvim/plugins/extras/editor/refactoring.lua b/lua/lazyvim/plugins/extras/editor/refactoring.lua
index 11ab3786..d1105d3b 100644
--- a/lua/lazyvim/plugins/extras/editor/refactoring.lua
+++ b/lua/lazyvim/plugins/extras/editor/refactoring.lua
@@ -1,95 +1,64 @@
-local pick = function()
- local refactoring = require("refactoring")
- if LazyVim.pick.picker.name == "telescope" then
- return require("telescope").extensions.refactoring.refactors()
- elseif LazyVim.pick.picker.name == "fzf" then
- local fzf_lua = require("fzf-lua")
- local results = refactoring.get_refactors()
-
- local opts = {
- fzf_opts = {},
- fzf_colors = true,
- actions = {
- ["default"] = function(selected)
- refactoring.refactor(selected[1])
- end,
- },
- }
- fzf_lua.fzf_exec(results, opts)
- else
- refactoring.select_refactor()
+if LazyVim.has_extra("editor.refactoring") then
+ if vim.fn.has("nvim-0.12") == 0 then
+ LazyVim.error("refactoring.nvim requires Neovim 0.12 or higher", { title = "refactoring.nvim" })
+ return {}
end
end
return {
+ { "lewis6991/async.nvim", lazy = true },
+
{
"ThePrimeagen/refactoring.nvim",
event = { "BufReadPre", "BufNewFile" },
- dependencies = {
- "nvim-lua/plenary.nvim",
- "nvim-treesitter/nvim-treesitter",
- },
keys = {
{ "r", "", desc = "+refactor", mode = { "n", "x" } },
{
"rs",
- pick,
+ function()
+ return require("refactoring").select_refactor()
+ end,
mode = { "n", "x" },
- desc = "Refactor",
+ desc = "Select Refactor",
},
{
"ri",
function()
- return require("refactoring").refactor("Inline Variable")
+ return require("refactoring").inline_var()
end,
mode = { "n", "x" },
desc = "Inline Variable",
expr = true,
},
- {
- "rb",
- function()
- return require("refactoring").refactor("Extract Block")
- end,
- mode = { "n", "x" },
- desc = "Extract Block",
- expr = true,
- },
- {
- "rf",
- function()
- return require("refactoring").refactor("Extract Block To File")
- end,
- mode = { "n", "x" },
- desc = "Extract Block To File",
- expr = true,
- },
{
"rP",
function()
- require("refactoring").debug.printf({ below = false })
+ return require("refactoring.debug").print_loc({ output_location = "below" })
end,
- desc = "Debug Print",
+ desc = "Debug Print Location",
+ expr = true,
},
{
"rp",
function()
- require("refactoring").debug.print_var({ normal = true })
+ return require("refactoring.debug").print_var({ output_location = "below" }) .. "iw"
end,
mode = { "n", "x" },
desc = "Debug Print Variable",
+ expr = true,
},
{
"rc",
function()
- require("refactoring").debug.cleanup({})
+ return require("refactoring.debug").cleanup({ restore_view = true }) .. "ag"
end,
desc = "Debug Cleanup",
+ expr = true,
},
{
"rf",
function()
- return require("refactoring").refactor("Extract Function")
+ return require("refactoring").extract_func()
end,
mode = { "n", "x" },
desc = "Extract Function",
@@ -98,7 +67,7 @@ return {
{
"rF",
function()
- return require("refactoring").refactor("Extract Function To File")
+ return require("refactoring").extract_func_to_file()
end,
mode = { "n", "x" },
desc = "Extract Function To File",
@@ -107,52 +76,13 @@ return {
{
"rx",
function()
- return require("refactoring").refactor("Extract Variable")
+ return require("refactoring").extract_var()
end,
mode = { "n", "x" },
desc = "Extract Variable",
expr = true,
},
- {
- "rp",
- function()
- require("refactoring").debug.print_var()
- end,
- mode = { "n", "x" },
- desc = "Debug Print Variable",
- },
},
- opts = {
- prompt_func_return_type = {
- go = false,
- java = false,
- cpp = false,
- c = false,
- h = false,
- hpp = false,
- cxx = false,
- },
- prompt_func_param_type = {
- go = false,
- java = false,
- cpp = false,
- c = false,
- h = false,
- hpp = false,
- cxx = false,
- },
- printf_statements = {},
- print_var_statements = {},
- show_success_message = true, -- shows a message with information about the refactor on success
- -- i.e. [Refactor] Inlined 3 variable occurrences
- },
- config = function(_, opts)
- require("refactoring").setup(opts)
- if LazyVim.has("telescope.nvim") then
- LazyVim.on_load("telescope.nvim", function()
- require("telescope").load_extension("refactoring")
- end)
- end
- end,
+ opts = {},
},
}
diff --git a/lua/lazyvim/plugins/extras/lang/typescript/oxc.lua b/lua/lazyvim/plugins/extras/lang/typescript/oxc.lua
index a516fc89..d4efb30c 100644
--- a/lua/lazyvim/plugins/extras/lang/typescript/oxc.lua
+++ b/lua/lazyvim/plugins/extras/lang/typescript/oxc.lua
@@ -29,7 +29,11 @@ return {
opts = {
servers = {
---@type lspconfig.settings.oxlint
- oxlint = {},
+ oxlint = {
+ settings = {
+ fixKind = "all",
+ },
+ },
--- disable the oxfmt lsp server since we use conform for formatting
oxfmt = { enabled = false },
},
diff --git a/lua/lazyvim/plugins/extras/lang/typescript/tsgo.lua b/lua/lazyvim/plugins/extras/lang/typescript/tsgo.lua
index ef075416..b526cef5 100644
--- a/lua/lazyvim/plugins/extras/lang/typescript/tsgo.lua
+++ b/lua/lazyvim/plugins/extras/lang/typescript/tsgo.lua
@@ -34,15 +34,15 @@ return {
settings = {
typescript = {
inlayHints = {
+ enumMemberValues = { enabled = true },
+ functionLikeReturnTypes = { enabled = false },
parameterNames = {
enabled = "literals",
suppressWhenArgumentMatchesName = true,
},
parameterTypes = { enabled = true },
- variableTypes = { enabled = true },
propertyDeclarationTypes = { enabled = true },
- functionLikeReturnTypes = { enabled = false },
- enumMemberValues = { enabled = true },
+ variableTypes = { enabled = false },
},
},
},
diff --git a/lua/lazyvim/plugins/treesitter.lua b/lua/lazyvim/plugins/treesitter.lua
index 6de91b30..4ef68c8f 100644
--- a/lua/lazyvim/plugins/treesitter.lua
+++ b/lua/lazyvim/plugins/treesitter.lua
@@ -6,6 +6,7 @@ return {
{
"nvim-treesitter/nvim-treesitter",
branch = "main",
+ commit = vim.fn.has("nvim-0.12") == 0 and "7caec274fd19c12b55902a5b795100d21531391f" or nil,
version = false, -- last release is way too old and doesn't work on Windows
build = function()
local TS = require("nvim-treesitter")
diff --git a/lua/lazyvim/plugins/util.lua b/lua/lazyvim/plugins/util.lua
index 8d8aa220..9d0d231c 100644
--- a/lua/lazyvim/plugins/util.lua
+++ b/lua/lazyvim/plugins/util.lua
@@ -23,6 +23,8 @@ return {
nav_j = { "", term_nav("j"), desc = "Go to Lower Window", expr = true, mode = "t" },
nav_k = { "", term_nav("k"), desc = "Go to Upper Window", expr = true, mode = "t" },
nav_l = { "", term_nav("l"), desc = "Go to Right Window", expr = true, mode = "t" },
+ hide_slash = { "", "hide", desc = "Hide Terminal", mode = "t" },
+ hide_underscore = { "", "hide", desc = "which_key_ignore", mode = "t" },
},
},
},