diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json
index b3c4f00b..d1d210f5 100644
--- a/.github/.release-please-manifest.json
+++ b/.github/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "14.8.0"
+ ".": "14.9.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1057fb57..7c9c762e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,33 @@
# Changelog
+## [14.9.0](https://github.com/LazyVim/LazyVim/compare/v14.8.0...v14.9.0) (2025-01-30)
+
+
+### Features
+
+* **markdown:** added markdown support for codecompanion ([e9db488](https://github.com/LazyVim/LazyVim/commit/e9db488acaa04f1a9eca6d022e57fed4271b8af8))
+* **snacks.picker:** added <leader>si to search icons ([#5460](https://github.com/LazyVim/LazyVim/issues/5460)) ([eea52be](https://github.com/LazyVim/LazyVim/commit/eea52be3447502dde77d9e6fa75fd597a0b5a86a))
+* **snacks.picker:** added <leader>su to search undotree ([#5447](https://github.com/LazyVim/LazyVim/issues/5447)) ([332b320](https://github.com/LazyVim/LazyVim/commit/332b32080c52727a16db90e06989caa0c378caa1))
+* **snacks.picker:** added `leader-fB` to find any buffer (including hidden & nofile) ([83bf636](https://github.com/LazyVim/LazyVim/commit/83bf6360a1f28a3fc1afe31ae300247fc01c7a90))
+* **snacks.picker:** added `leader-sp` to search for plugin spec ([7cf4185](https://github.com/LazyVim/LazyVim/commit/7cf4185dc4d1fe49ad004d33a6703603fb4500ff))
+* **snacks.picker:** added alt-c to toggle between cwd/root dir ([6be7c4f](https://github.com/LazyVim/LazyVim/commit/6be7c4fee4fb755ff07f7bcc13eac96e1d8c279a))
+* **snacks.picker:** flash.nvim integration ([5d24aa6](https://github.com/LazyVim/LazyVim/commit/5d24aa63111af68fbada8c97fedb75b07b8c3c92))
+* **snacks.picker:** use snacks picker for notifications when enabled ([01a70cc](https://github.com/LazyVim/LazyVim/commit/01a70cc60ed2760afc819510177fb8d12a371b25))
+* **snacks:** extra for snacks explorer (replacement for neo-tree) ([e20d9af](https://github.com/LazyVim/LazyVim/commit/e20d9afcbc980510093a3753a3991d8c934cbb75))
+* **snippets:** an extra for mini.snippets ([#5274](https://github.com/LazyVim/LazyVim/issues/5274)) ([8b4e6ff](https://github.com/LazyVim/LazyVim/commit/8b4e6ff70d682cad3b1f4999623c3f0ac639fa82))
+
+
+### Bug Fixes
+
+* **keymaps:** remove unneeded and ambiguous `<leader>w` keymap ([#5459](https://github.com/LazyVim/LazyVim/issues/5459)) ([132986a](https://github.com/LazyVim/LazyVim/commit/132986a624b49bf740161d90ce94f16dd5ea5883))
+* **luasnip:** schedule `jump` to be compatible with blink, nvim-cmp still works after change ([#5470](https://github.com/LazyVim/LazyVim/issues/5470)) ([0350934](https://github.com/LazyVim/LazyVim/commit/0350934d56579f3e6a9d40fa47313b2970d74772))
+* **root:** pass args to root.get ([dc8512f](https://github.com/LazyVim/LazyVim/commit/dc8512fce1ec1cd4b0ca52d1077b2ed3894d51c8))
+* **snacks.picker:** flash integration ([b5cd0d0](https://github.com/LazyVim/LazyVim/commit/b5cd0d0e27081be3ef1905475a0fe541b7661870))
+* **snacks.picker:** snacks => flash ([3de7b24](https://github.com/LazyVim/LazyVim/commit/3de7b24cf6ed844772ea047476a400c56d5f4b42))
+* **snacks:** use `Snacks.picker` for recent files ([#5485](https://github.com/LazyVim/LazyVim/issues/5485)) ([f0d2629](https://github.com/LazyVim/LazyVim/commit/f0d2629bd859eeac343999b0fe145f9beb227c4a))
+* **sql:** better nvim-cmp check. Closes [#5188](https://github.com/LazyVim/LazyVim/issues/5188) ([1e83b4f](https://github.com/LazyVim/LazyVim/commit/1e83b4f843f88678189df81b1c88a400c53abdbc))
+* **vscode:** diabled some snacks plugins. Fixes [#5364](https://github.com/LazyVim/LazyVim/issues/5364) ([c7a7ab5](https://github.com/LazyVim/LazyVim/commit/c7a7ab51129692927ae47f4e57ce22d10d48467e))
+
## [14.8.0](https://github.com/LazyVim/LazyVim/compare/v14.7.0...v14.8.0) (2025-01-20)
diff --git a/doc/LazyVim.txt b/doc/LazyVim.txt
index 285451bb..50d40e8e 100644
--- a/doc/LazyVim.txt
+++ b/doc/LazyVim.txt
@@ -1,4 +1,4 @@
-*LazyVim.txt* For Neovim Last change: 2025 January 23
+*LazyVim.txt* For Neovim Last change: 2025 February 02
==============================================================================
Table of Contents *LazyVim-table-of-contents*
diff --git a/lua/lazyvim/config/init.lua b/lua/lazyvim/config/init.lua
index 8a0b2ced..cbe0a571 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 = "14.8.0" -- x-release-please-version
+M.version = "14.9.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 48726b02..3e3829d1 100644
--- a/lua/lazyvim/config/keymaps.lua
+++ b/lua/lazyvim/config/keymaps.lua
@@ -182,7 +182,6 @@ map("t", "", "close", { desc = "Hide Terminal" })
map("t", "", "close", { desc = "which_key_ignore" })
-- windows
-map("n", "w", "", { desc = "Windows", remap = true })
map("n", "-", "s", { desc = "Split Window Below", remap = true })
map("n", "|", "v", { desc = "Split Window Right", remap = true })
map("n", "wd", "c", { desc = "Delete Window", remap = true })
diff --git a/lua/lazyvim/plugins/extras/ai/copilot.lua b/lua/lazyvim/plugins/extras/ai/copilot.lua
index 4651c689..4f1d54f2 100644
--- a/lua/lazyvim/plugins/extras/ai/copilot.lua
+++ b/lua/lazyvim/plugins/extras/ai/copilot.lua
@@ -5,11 +5,12 @@ return {
"zbirenbaum/copilot.lua",
cmd = "Copilot",
build = ":Copilot auth",
- event = "InsertEnter",
+ event = "BufReadPost",
opts = {
suggestion = {
enabled = not vim.g.ai_cmp,
auto_trigger = true,
+ hide_during_completion = vim.g.ai_cmp,
keymap = {
accept = false, -- handled by nvim-cmp / blink.cmp
next = "",
diff --git a/lua/lazyvim/plugins/extras/coding/luasnip.lua b/lua/lazyvim/plugins/extras/coding/luasnip.lua
index 8b3daed7..85ed2fd5 100644
--- a/lua/lazyvim/plugins/extras/coding/luasnip.lua
+++ b/lua/lazyvim/plugins/extras/coding/luasnip.lua
@@ -30,7 +30,9 @@ return {
opts = function()
LazyVim.cmp.actions.snippet_forward = function()
if require("luasnip").jumpable(1) then
- require("luasnip").jump(1)
+ vim.schedule(function()
+ require("luasnip").jump(1)
+ end)
return true
end
end
diff --git a/lua/lazyvim/plugins/extras/coding/mini-snippets.lua b/lua/lazyvim/plugins/extras/coding/mini-snippets.lua
index f68af110..5ce82c80 100644
--- a/lua/lazyvim/plugins/extras/coding/mini-snippets.lua
+++ b/lua/lazyvim/plugins/extras/coding/mini-snippets.lua
@@ -61,7 +61,7 @@ return {
{ "L3MON4D3/LuaSnip", optional = true, enabled = false },
-- add mini.snippets
- desc = "mini.snippets(beta), a plugin to manage and expand snippets (alternative for luasnip)",
+ desc = "Manage and expand snippets (alternative to Luasnip)",
{
"echasnovski/mini.snippets",
event = "InsertEnter", -- don't depend on other plugins to load...
diff --git a/lua/lazyvim/plugins/extras/editor/snacks_explorer.lua b/lua/lazyvim/plugins/extras/editor/snacks_explorer.lua
new file mode 100644
index 00000000..aa87e85c
--- /dev/null
+++ b/lua/lazyvim/plugins/extras/editor/snacks_explorer.lua
@@ -0,0 +1,25 @@
+return {
+ { "nvim-neo-tree/neo-tree.nvim", enabled = false },
+ {
+ "folke/snacks.nvim",
+ opts = { explorer = {} },
+ keys = {
+ {
+ "fe",
+ function()
+ Snacks.explorer({ cwd = LazyVim.root() })
+ end,
+ desc = "Explorer Snacks (root dir)",
+ },
+ {
+ "fE",
+ function()
+ Snacks.explorer()
+ end,
+ desc = "Explorer Snacks (cwd)",
+ },
+ { "e", "fe", desc = "Explorer Snacks (root dir)", remap = true },
+ { "E", "fE", desc = "Explorer Snacks (cwd)", remap = true },
+ },
+ },
+}
diff --git a/lua/lazyvim/plugins/extras/editor/snacks_picker.lua b/lua/lazyvim/plugins/extras/editor/snacks_picker.lua
index 48bb7861..9685c369 100644
--- a/lua/lazyvim/plugins/extras/editor/snacks_picker.lua
+++ b/lua/lazyvim/plugins/extras/editor/snacks_picker.lua
@@ -60,6 +60,7 @@ return {
{ "/", LazyVim.pick("grep"), desc = "Grep (Root Dir)" },
{ ":", function() Snacks.picker.command_history() end, desc = "Command History" },
{ "", LazyVim.pick("files"), desc = "Find Files (Root Dir)" },
+ { "n", function() Snacks.picker.notifications() end, desc = "Notification History" },
-- find
{ "fb", function() Snacks.picker.buffers() end, desc = "Buffers" },
{ "fB", function() Snacks.picker.buffers({ hidden = true, nofile = true }) end, desc = "Buffers (all)" },
@@ -68,7 +69,7 @@ return {
{ "fF", LazyVim.pick("files", { root = false }), desc = "Find Files (cwd)" },
{ "fg", function() Snacks.picker.git_files() end, desc = "Find Files (git-files)" },
{ "fr", LazyVim.pick("oldfiles"), desc = "Recent" },
- { "fR", LazyVim.pick("oldfiles", { filter = { cwd = true }}), desc = "Recent (cwd)" },
+ { "fR", function() Snacks.picker.recent({ filter = { cwd = true }}) end, desc = "Recent (cwd)" },
{ "fp", function() Snacks.picker.projects() end, desc = "Projects" },
-- git
{ "gc", function() Snacks.picker.git_log() end, desc = "Git Log" },
@@ -109,7 +110,11 @@ return {
if LazyVim.has("trouble.nvim") then
return vim.tbl_deep_extend("force", opts or {}, {
picker = {
- actions = require("trouble.sources.snacks").actions,
+ actions = {
+ trouble_open = function(...)
+ return require("trouble.sources.snacks").actions.trouble_open.action(...)
+ end,
+ },
win = {
input = {
keys = {
@@ -152,4 +157,45 @@ return {
{ "sT", function () Snacks.picker.todo_comments({ keywords = { "TODO", "FIX", "FIXME" } }) end, desc = "Todo/Fix/Fixme" },
},
},
+ {
+ "folke/flash.nvim",
+ optional = true,
+ specs = {
+ {
+ "folke/snacks.nvim",
+ opts = {
+ picker = {
+ win = {
+ input = {
+ keys = {
+ [""] = { "flash", mode = { "n", "i" } },
+ ["s"] = { "flash" },
+ },
+ },
+ },
+ actions = {
+ flash = function(picker)
+ require("flash").jump({
+ pattern = "^",
+ label = { after = { 0, 0 } },
+ search = {
+ mode = "search",
+ exclude = {
+ function(win)
+ return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= "snacks_picker_list"
+ end,
+ },
+ },
+ action = function(match)
+ local idx = picker.list:row2idx(match.pos[1])
+ picker.list:_move(idx, true, true)
+ end,
+ })
+ end,
+ },
+ },
+ },
+ },
+ },
+ },
}
diff --git a/lua/lazyvim/plugins/extras/lang/markdown.lua b/lua/lazyvim/plugins/extras/lang/markdown.lua
index a73fe114..8b07985b 100644
--- a/lua/lazyvim/plugins/extras/lang/markdown.lua
+++ b/lua/lazyvim/plugins/extras/lang/markdown.lua
@@ -108,7 +108,7 @@ return {
enabled = false,
},
},
- ft = { "markdown", "norg", "rmd", "org" },
+ ft = { "markdown", "norg", "rmd", "org", "codecompanion" },
config = function(_, opts)
require("render-markdown").setup(opts)
Snacks.toggle({
diff --git a/lua/lazyvim/plugins/ui.lua b/lua/lazyvim/plugins/ui.lua
index d556d1f1..0669054d 100644
--- a/lua/lazyvim/plugins/ui.lua
+++ b/lua/lazyvim/plugins/ui.lua
@@ -37,6 +37,9 @@ return {
highlight = "Directory",
text_align = "left",
},
+ {
+ filetype = "snacks_layout_box",
+ },
},
---@param opts bufferline.IconFetcherOpts
get_element_icon = function(opts)
@@ -278,7 +281,13 @@ return {
},
-- stylua: ignore
keys = {
- { "n", function() Snacks.notifier.show_history() end, desc = "Notification History" },
+ { "n", function()
+ if Snacks.config.picker and Snacks.config.picker.enabled then
+ Snacks.picker.notifications()
+ else
+ Snacks.notifier.show_history()
+ end
+ end, desc = "Notification History" },
{ "un", function() Snacks.notifier.hide() end, desc = "Dismiss All Notifications" },
},
},
@@ -316,4 +325,18 @@ return {
},
},
},
+ {
+ "folke/snacks.nvim",
+ opts = function(_, opts)
+ if not opts.picker then
+ return
+ end
+ table.insert(opts.dashboard.preset.keys, 3, {
+ icon = " ",
+ key = "p",
+ desc = "Projects",
+ action = ":lua Snacks.picker.projects()",
+ })
+ end,
+ },
}