mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
Merge branch 'LazyVim:main' into main
This commit is contained in:
commit
a5dbf0ad99
32 changed files with 799 additions and 451 deletions
45
CHANGELOG.md
45
CHANGELOG.md
|
|
@ -1,5 +1,50 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [11.0.1](https://github.com/LazyVim/LazyVim/compare/v11.0.0...v11.0.1) (2024-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **news.md:** correct phrase to disable `inlay_hints` ([58cf6f9](https://github.com/LazyVim/LazyVim/commit/58cf6f971b78170aef5f26ccb79149213f4a692d))
|
||||||
|
* **treesitter-rewrite:** show error in Extras only when enabled ([#3178](https://github.com/LazyVim/LazyVim/issues/3178)) ([639dfce](https://github.com/LazyVim/LazyVim/commit/639dfce0101cc6c0174e116872df91ccb30cb597))
|
||||||
|
* **util:** get opts from parsing specs instead of plugins ([14872fa](https://github.com/LazyVim/LazyVim/commit/14872fa816fd770eba0f2b5efc69d5b29d4073fb))
|
||||||
|
|
||||||
|
## [11.0.0](https://github.com/LazyVim/LazyVim/compare/v10.25.0...v11.0.0) (2024-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* **util:** move `vim-startuptime` to an extra
|
||||||
|
* **coding:** move `mini.ai` to an extra
|
||||||
|
* **mini.surround:** move `mini.surround` to an extra
|
||||||
|
* **ui:** move `mini.indentscope` to an extra
|
||||||
|
* **ui:** moved treesitter-context to an extra. No longer a core plugin
|
||||||
|
* **coding:** native snippets are now the default on Neovim 0.10. Install the luasnip extra to get luasnip back
|
||||||
|
* **coding:** use native comments on 0.10, with support for ts_context_commentstring
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **coding:** move `mini.ai` to an extra ([4f4911f](https://github.com/LazyVim/LazyVim/commit/4f4911ff95bc35438a2b8dd2d058b15f105f2ff1))
|
||||||
|
* **coding:** native snippets are now the default on Neovim 0.10. Install the luasnip extra to get luasnip back ([3c4ebd5](https://github.com/LazyVim/LazyVim/commit/3c4ebd522e7c475cfedcee5dfa7a008e798c404c))
|
||||||
|
* **coding:** use native comments on 0.10, with support for ts_context_commentstring ([d999be7](https://github.com/LazyVim/LazyVim/commit/d999be7401783e0f3a610319fa1b327d38fa3e52))
|
||||||
|
* **extras:** added extra for the `nvim-treesitter` rewrite. Some plugins are not compatible and will be disabled. ([2008146](https://github.com/LazyVim/LazyVim/commit/20081460b65bc7a117933b0dcebbcaa4dcb82b23))
|
||||||
|
* **keymaps:** added leader-uI to open InspectTree ([3b74ef7](https://github.com/LazyVim/LazyVim/commit/3b74ef793fb7cd8964231393a57b9e3c846b7d1e))
|
||||||
|
* **lsp:** enable inlay hints by default on Neovim 0.10 ([960e958](https://github.com/LazyVim/LazyVim/commit/960e958548adce7d96ff2e0c014ce2249897125e))
|
||||||
|
* **mini.surround:** move `mini.surround` to an extra ([e37a699](https://github.com/LazyVim/LazyVim/commit/e37a699096ccb209c1babc29c1d5eeeab74102a1))
|
||||||
|
* **ui:** move `mini.indentscope` to an extra ([69e6daa](https://github.com/LazyVim/LazyVim/commit/69e6daae2ccb4b7b7180e439c1b05d72d3c64e11))
|
||||||
|
* **ui:** moved treesitter-context to an extra. No longer a core plugin ([03704e2](https://github.com/LazyVim/LazyVim/commit/03704e22998be9db17f114acc4060d714fe652fb))
|
||||||
|
* **util:** move `vim-startuptime` to an extra ([66dc9c0](https://github.com/LazyVim/LazyVim/commit/66dc9c09d6356ddc7e5870a4aa74824d3623d315))
|
||||||
|
* **util:** set_upvalue ([f02507b](https://github.com/LazyVim/LazyVim/commit/f02507b1598379250baab293c423f79c393e28e5))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **cmp:** never auto bracket for snippets and correct prev char check. Fixes [#2949](https://github.com/LazyVim/LazyVim/issues/2949) ([6e7ba50](https://github.com/LazyVim/LazyVim/commit/6e7ba50141b1cda415c9391fd345a1e428bad9b6))
|
||||||
|
* **dap:** add debugger to filetypes mapping for launch.json ([#3165](https://github.com/LazyVim/LazyVim/issues/3165)) ([183d6ee](https://github.com/LazyVim/LazyVim/commit/183d6eea606556c8bd7f80a70660c54670e04649))
|
||||||
|
* **dap:** use jsonc support from plenary. Same as the code from neoconf. Fixes [#3174](https://github.com/LazyVim/LazyVim/issues/3174) ([8dae76c](https://github.com/LazyVim/LazyVim/commit/8dae76c1fd6fb90199b56cda8b6ec21576d02eb5))
|
||||||
|
* **health:** add warning when not using 0.10.0 ([9fe8b15](https://github.com/LazyVim/LazyVim/commit/9fe8b15928077cb0c20aeea111b42f9698c78330))
|
||||||
|
* **treesitter-rewrite:** disable vim-illuminate ([b739eb3](https://github.com/LazyVim/LazyVim/commit/b739eb35033acaf20423920d103d5ad3e8350f23))
|
||||||
|
|
||||||
## [10.25.0](https://github.com/LazyVim/LazyVim/compare/v10.24.0...v10.25.0) (2024-05-15)
|
## [10.25.0](https://github.com/LazyVim/LazyVim/compare/v10.24.0...v10.25.0) (2024-05-15)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
44
NEWS.md
44
NEWS.md
|
|
@ -1,5 +1,49 @@
|
||||||
# What's new?
|
# What's new?
|
||||||
|
|
||||||
|
## 11.x
|
||||||
|
|
||||||
|
- new option `vim.g.deprecation_warnings` to disable deprecation warnings
|
||||||
|
Defaults to `false`. To disable, set it to `true` in your `options.lua`
|
||||||
|
|
||||||
|
- `vim-illuminate` move to extras
|
||||||
|
Document highlights now use native lsp functionality by default
|
||||||
|
|
||||||
|
Since Neovim 0.10 has been released, I've been working on a new version of **LazyVim**
|
||||||
|
that is fully compatible with all the latest Neovim features.
|
||||||
|
|
||||||
|
Additionally, some core plugins have been moved to extras.
|
||||||
|
|
||||||
|
- `native snippets` are now the default on Neovim 0.10
|
||||||
|
Older versions of Neovim will use the new `luasnip` extra.
|
||||||
|
|
||||||
|
- `native comments` are now the default on Neovim 0.10
|
||||||
|
Older versions of Neovim will use the new `mini-comment` extra.
|
||||||
|
`nvim-ts-context-commentstring` has been integrated in the native comments.
|
||||||
|
|
||||||
|
- `inlay hints` have been in **LazyVim** for a while, but are now
|
||||||
|
enabled by default. To disable them:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
{
|
||||||
|
"nvim-lspconfig",
|
||||||
|
opts = {
|
||||||
|
inlay_hints = { enabled = false },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- plugins moved to extras:
|
||||||
|
|
||||||
|
- `mini.ai` which I couldn't live without, but not everyone needs it
|
||||||
|
- `mini.surround`
|
||||||
|
- `mini.indentscope` scopes are now also highlighted with `indent-blankline`
|
||||||
|
- `nvim-treesitter-context`
|
||||||
|
|
||||||
|
- There's a new extra for the `nvim-treesitter` **rewrite**.
|
||||||
|
Since the rewrite is not backward compatible, some plugins will be disabled
|
||||||
|
when you enable this extra: `vim-illuminate`, `nvim-ts-autotag`, and `nvim-ts-autotag`.
|
||||||
|
I would **NOT** recommend enabling this extra for now.
|
||||||
|
|
||||||
## 10.x
|
## 10.x
|
||||||
|
|
||||||
- added new extra for [mini.diff](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-diff.md)
|
- added new extra for [mini.diff](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-diff.md)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
*LazyVim.txt* For Neovim >= 0.9.0 Last change: 2024 May 16
|
*LazyVim.txt* For Neovim >= 0.9.0 Last change: 2024 May 17
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Table of Contents *LazyVim-table-of-contents*
|
Table of Contents *LazyVim-table-of-contents*
|
||||||
|
|
|
||||||
|
|
@ -275,6 +275,10 @@ function M.init()
|
||||||
-- after installing missing plugins
|
-- after installing missing plugins
|
||||||
M.load("options")
|
M.load("options")
|
||||||
|
|
||||||
|
if vim.g.deprecation_warnings == false then
|
||||||
|
vim.deprecate = function() end
|
||||||
|
end
|
||||||
|
|
||||||
LazyVim.plugin.setup()
|
LazyVim.plugin.setup()
|
||||||
M.json.load()
|
M.json.load()
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ map("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
|
||||||
map("n", "]b", "<cmd>bnext<cr>", { desc = "Next Buffer" })
|
map("n", "]b", "<cmd>bnext<cr>", { desc = "Next Buffer" })
|
||||||
map("n", "<leader>bb", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
map("n", "<leader>bb", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
||||||
map("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
map("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
||||||
|
map("n", "<leader>bd", LazyVim.ui.bufremove, { desc = "Delete Buffer" })
|
||||||
|
map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" })
|
||||||
|
|
||||||
-- Clear search with <esc>
|
-- Clear search with <esc>
|
||||||
map({ "i", "n" }, "<esc>", "<cmd>noh<cr><esc>", { desc = "Escape and Clear hlsearch" })
|
map({ "i", "n" }, "<esc>", "<cmd>noh<cr><esc>", { desc = "Escape and Clear hlsearch" })
|
||||||
|
|
@ -139,6 +141,7 @@ map("n", "<leader>qq", "<cmd>qa<cr>", { desc = "Quit All" })
|
||||||
|
|
||||||
-- highlights under cursor
|
-- highlights under cursor
|
||||||
map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" })
|
map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" })
|
||||||
|
map("n", "<leader>uI", "<cmd>InspectTree<cr>", { desc = "Inspect Tree" })
|
||||||
|
|
||||||
-- LazyVim Changelog
|
-- LazyVim Changelog
|
||||||
map("n", "<leader>L", function() LazyVim.news.changelog() end, { desc = "LazyVim Changelog" })
|
map("n", "<leader>L", function() LazyVim.news.changelog() end, { desc = "LazyVim Changelog" })
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
vim.g.mapleader = " "
|
vim.g.mapleader = " "
|
||||||
vim.g.maplocalleader = "\\"
|
vim.g.maplocalleader = "\\"
|
||||||
|
|
||||||
-- Enable LazyVim auto format
|
-- LazyVim auto format
|
||||||
vim.g.autoformat = true
|
vim.g.autoformat = true
|
||||||
|
|
||||||
-- LazyVim root dir detection
|
-- LazyVim root dir detection
|
||||||
|
|
@ -25,21 +25,30 @@ vim.g.lazygit_config = true
|
||||||
-- * powershell
|
-- * powershell
|
||||||
-- LazyVim.terminal.setup("pwsh")
|
-- LazyVim.terminal.setup("pwsh")
|
||||||
|
|
||||||
|
-- Hide deprecation warnings
|
||||||
|
vim.g.deprecation_warnings = false
|
||||||
|
|
||||||
local opt = vim.opt
|
local opt = vim.opt
|
||||||
|
|
||||||
opt.autowrite = true -- Enable auto write
|
opt.autowrite = true -- Enable auto write
|
||||||
|
|
||||||
if not vim.env.SSH_TTY then
|
|
||||||
-- only set clipboard if not in ssh, to make sure the OSC 52
|
-- only set clipboard if not in ssh, to make sure the OSC 52
|
||||||
-- integration works automatically. Requires Neovim >= 0.10.0
|
-- integration works automatically. Requires Neovim >= 0.10.0
|
||||||
opt.clipboard = "unnamedplus" -- Sync with system clipboard
|
opt.clipboard = vim.env.SSH_TTY and "" or "unnamedplus" -- Sync with system clipboard
|
||||||
end
|
|
||||||
|
|
||||||
opt.completeopt = "menu,menuone,noselect"
|
opt.completeopt = "menu,menuone,noselect"
|
||||||
opt.conceallevel = 2 -- Hide * markup for bold and italic, but not markers with substitutions
|
opt.conceallevel = 2 -- Hide * markup for bold and italic, but not markers with substitutions
|
||||||
opt.confirm = true -- Confirm to save changes before exiting modified buffer
|
opt.confirm = true -- Confirm to save changes before exiting modified buffer
|
||||||
opt.cursorline = true -- Enable highlighting of the current line
|
opt.cursorline = true -- Enable highlighting of the current line
|
||||||
opt.expandtab = true -- Use spaces instead of tabs
|
opt.expandtab = true -- Use spaces instead of tabs
|
||||||
|
opt.fillchars = {
|
||||||
|
foldopen = "",
|
||||||
|
foldclose = "",
|
||||||
|
fold = " ",
|
||||||
|
foldsep = " ",
|
||||||
|
diff = "╱",
|
||||||
|
eob = " ",
|
||||||
|
}
|
||||||
|
opt.foldlevel = 99
|
||||||
|
opt.formatexpr = "v:lua.require'lazyvim.util'.format.formatexpr()"
|
||||||
opt.formatoptions = "jcroqlnt" -- tcqj
|
opt.formatoptions = "jcroqlnt" -- tcqj
|
||||||
opt.grepformat = "%f:%l:%c:%m"
|
opt.grepformat = "%f:%l:%c:%m"
|
||||||
opt.grepprg = "rg --vimgrep"
|
opt.grepprg = "rg --vimgrep"
|
||||||
|
|
@ -66,11 +75,10 @@ opt.spelllang = { "en" }
|
||||||
opt.splitbelow = true -- Put new windows below current
|
opt.splitbelow = true -- Put new windows below current
|
||||||
opt.splitkeep = "screen"
|
opt.splitkeep = "screen"
|
||||||
opt.splitright = true -- Put new windows right of current
|
opt.splitright = true -- Put new windows right of current
|
||||||
|
opt.statuscolumn = [[%!v:lua.require'lazyvim.util'.ui.statuscolumn()]]
|
||||||
opt.tabstop = 2 -- Number of spaces tabs count for
|
opt.tabstop = 2 -- Number of spaces tabs count for
|
||||||
opt.termguicolors = true -- True color support
|
opt.termguicolors = true -- True color support
|
||||||
if not vim.g.vscode then
|
opt.timeoutlen = vim.g.vscode and 1000 or 300 -- Lower than default (1000) to quickly trigger which-key
|
||||||
opt.timeoutlen = 300 -- Lower than default (1000) to quickly trigger which-key
|
|
||||||
end
|
|
||||||
opt.undofile = true
|
opt.undofile = true
|
||||||
opt.undolevels = 10000
|
opt.undolevels = 10000
|
||||||
opt.updatetime = 200 -- Save swap file and trigger CursorHold
|
opt.updatetime = 200 -- Save swap file and trigger CursorHold
|
||||||
|
|
@ -78,38 +86,16 @@ opt.virtualedit = "block" -- Allow cursor to move where there is no text in visu
|
||||||
opt.wildmode = "longest:full,full" -- Command-line completion mode
|
opt.wildmode = "longest:full,full" -- Command-line completion mode
|
||||||
opt.winminwidth = 5 -- Minimum window width
|
opt.winminwidth = 5 -- Minimum window width
|
||||||
opt.wrap = false -- Disable line wrap
|
opt.wrap = false -- Disable line wrap
|
||||||
opt.fillchars = {
|
|
||||||
foldopen = "",
|
|
||||||
foldclose = "",
|
|
||||||
fold = " ",
|
|
||||||
foldsep = " ",
|
|
||||||
diff = "╱",
|
|
||||||
eob = " ",
|
|
||||||
}
|
|
||||||
|
|
||||||
if vim.fn.has("nvim-0.10") == 1 then
|
if vim.fn.has("nvim-0.10") == 1 then
|
||||||
opt.smoothscroll = true
|
opt.smoothscroll = true
|
||||||
end
|
opt.foldexpr = "v:lua.require'lazyvim.util'.ui.foldexpr()"
|
||||||
|
opt.foldmethod = "expr"
|
||||||
-- Folding
|
opt.foldtext = ""
|
||||||
opt.foldlevel = 99
|
else
|
||||||
|
opt.foldmethod = "indent"
|
||||||
if vim.fn.has("nvim-0.9.0") == 1 then
|
|
||||||
opt.statuscolumn = [[%!v:lua.require'lazyvim.util'.ui.statuscolumn()]]
|
|
||||||
opt.foldtext = "v:lua.require'lazyvim.util'.ui.foldtext()"
|
opt.foldtext = "v:lua.require'lazyvim.util'.ui.foldtext()"
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HACK: causes freezes on <= 0.9, so only enable on >= 0.10 for now
|
|
||||||
if vim.fn.has("nvim-0.10") == 1 then
|
|
||||||
opt.foldmethod = "expr"
|
|
||||||
opt.foldexpr = "v:lua.require'lazyvim.util'.ui.foldexpr()"
|
|
||||||
opt.foldtext = ""
|
|
||||||
opt.fillchars = "fold: "
|
|
||||||
else
|
|
||||||
opt.foldmethod = "indent"
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.o.formatexpr = "v:lua.require'lazyvim.util'.format.formatexpr()"
|
|
||||||
|
|
||||||
-- Fix markdown indentation settings
|
-- Fix markdown indentation settings
|
||||||
vim.g.markdown_recommended_style = 0
|
vim.g.markdown_recommended_style = 0
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ function M.check()
|
||||||
|
|
||||||
if vim.fn.has("nvim-0.9.0") == 1 then
|
if vim.fn.has("nvim-0.9.0") == 1 then
|
||||||
ok("Using Neovim >= 0.9.0")
|
ok("Using Neovim >= 0.9.0")
|
||||||
|
if vim.fn.has("nvim-0.10.0") == 0 then
|
||||||
|
warn("Use Neovim >= 0.10.0 for the best experience")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
error("Neovim >= 0.9.0 is required")
|
error("Neovim >= 0.9.0 is required")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -96,50 +96,65 @@ return {
|
||||||
},
|
},
|
||||||
|
|
||||||
-- snippets
|
-- snippets
|
||||||
{
|
vim.snippet
|
||||||
"L3MON4D3/LuaSnip",
|
and {
|
||||||
build = (not LazyVim.is_win())
|
|
||||||
and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build'; make install_jsregexp"
|
|
||||||
or nil,
|
|
||||||
dependencies = {
|
|
||||||
{
|
|
||||||
"rafamadriz/friendly-snippets",
|
|
||||||
config = function()
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"nvim-cmp",
|
"nvim-cmp",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"saadparwaiz1/cmp_luasnip",
|
{ "rafamadriz/friendly-snippets" },
|
||||||
|
{ "garymjr/nvim-snippets", opts = { friendly_snippets = true } },
|
||||||
},
|
},
|
||||||
opts = function(_, opts)
|
opts = function(_, opts)
|
||||||
opts.snippet = {
|
opts.snippet = {
|
||||||
expand = function(args)
|
expand = function(args)
|
||||||
require("luasnip").lsp_expand(args.body)
|
vim.snippet.expand(args.body)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
table.insert(opts.sources, { name = "luasnip" })
|
table.insert(opts.sources, { name = "snippets" })
|
||||||
end,
|
end,
|
||||||
},
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
history = true,
|
|
||||||
delete_check_events = "TextChanged",
|
|
||||||
},
|
|
||||||
-- stylua: ignore
|
|
||||||
keys = {
|
keys = {
|
||||||
{
|
{
|
||||||
"<tab>",
|
"<Tab>",
|
||||||
function()
|
function()
|
||||||
return require("luasnip").jumpable(1) and "<Plug>luasnip-jump-next" or "<tab>"
|
if vim.snippet.active({ direction = 1 }) then
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.snippet.jump(1)
|
||||||
|
end)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return "<Tab>"
|
||||||
end,
|
end,
|
||||||
expr = true, silent = true, mode = "i",
|
expr = true,
|
||||||
|
silent = true,
|
||||||
|
mode = "i",
|
||||||
},
|
},
|
||||||
{ "<tab>", function() require("luasnip").jump(1) end, mode = "s" },
|
{
|
||||||
{ "<s-tab>", function() require("luasnip").jump(-1) end, mode = { "i", "s" } },
|
"<Tab>",
|
||||||
|
function()
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.snippet.jump(1)
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
silent = true,
|
||||||
|
mode = "s",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<S-Tab>",
|
||||||
|
function()
|
||||||
|
if vim.snippet.active({ direction = -1 }) then
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.snippet.jump(-1)
|
||||||
|
end)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return "<S-Tab>"
|
||||||
|
end,
|
||||||
|
expr = true,
|
||||||
|
silent = true,
|
||||||
|
mode = { "i", "s" },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
or { import = "lazyvim.plugins.extras.coding.luasnip", enabled = vim.fn.has("nvim-0.10") == 0 },
|
||||||
|
|
||||||
-- auto pairs
|
-- auto pairs
|
||||||
{
|
{
|
||||||
|
|
@ -166,43 +181,6 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Fast and feature-rich surround actions. For text that includes
|
|
||||||
-- surrounding characters like brackets or quotes, this allows you
|
|
||||||
-- to select the text inside, change or modify the surrounding characters,
|
|
||||||
-- and more.
|
|
||||||
{
|
|
||||||
"echasnovski/mini.surround",
|
|
||||||
keys = function(_, keys)
|
|
||||||
-- Populate the keys based on the user's options
|
|
||||||
local plugin = require("lazy.core.config").spec.plugins["mini.surround"]
|
|
||||||
local opts = require("lazy.core.plugin").values(plugin, "opts", false)
|
|
||||||
local mappings = {
|
|
||||||
{ opts.mappings.add, desc = "Add Surrounding", mode = { "n", "v" } },
|
|
||||||
{ opts.mappings.delete, desc = "Delete Surrounding" },
|
|
||||||
{ opts.mappings.find, desc = "Find Right Surrounding" },
|
|
||||||
{ opts.mappings.find_left, desc = "Find Left Surrounding" },
|
|
||||||
{ opts.mappings.highlight, desc = "Highlight Surrounding" },
|
|
||||||
{ opts.mappings.replace, desc = "Replace Surrounding" },
|
|
||||||
{ opts.mappings.update_n_lines, desc = "Update `MiniSurround.config.n_lines`" },
|
|
||||||
}
|
|
||||||
mappings = vim.tbl_filter(function(m)
|
|
||||||
return m[1] and #m[1] > 0
|
|
||||||
end, mappings)
|
|
||||||
return vim.list_extend(mappings, keys)
|
|
||||||
end,
|
|
||||||
opts = {
|
|
||||||
mappings = {
|
|
||||||
add = "gsa", -- Add surrounding in Normal and Visual modes
|
|
||||||
delete = "gsd", -- Delete surrounding
|
|
||||||
find = "gsf", -- Find surrounding (to the right)
|
|
||||||
find_left = "gsF", -- Find surrounding (to the left)
|
|
||||||
highlight = "gsh", -- Highlight surrounding
|
|
||||||
replace = "gsr", -- Replace surrounding
|
|
||||||
update_n_lines = "gsn", -- Update `n_lines`
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- comments
|
-- comments
|
||||||
{
|
{
|
||||||
"JoosepAlviste/nvim-ts-context-commentstring",
|
"JoosepAlviste/nvim-ts-context-commentstring",
|
||||||
|
|
@ -212,110 +190,22 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"echasnovski/mini.comment",
|
import = "lazyvim.plugins.extras.coding.mini-comment",
|
||||||
event = "VeryLazy",
|
enabled = function()
|
||||||
opts = {
|
if vim.fn.has("nvim-0.10") == 1 then
|
||||||
options = {
|
-- Majestically override the native `get_commentstring` function.
|
||||||
custom_commentstring = function()
|
vim.schedule(function()
|
||||||
|
LazyVim.inject.set_upvalue(
|
||||||
|
LazyVim.inject.get_upvalue(require("vim._comment").textobject, "get_comment_parts"),
|
||||||
|
"get_commentstring",
|
||||||
|
function()
|
||||||
return require("ts_context_commentstring.internal").calculate_commentstring() or vim.bo.commentstring
|
return require("ts_context_commentstring.internal").calculate_commentstring() or vim.bo.commentstring
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Better text-objects
|
|
||||||
{
|
|
||||||
"echasnovski/mini.ai",
|
|
||||||
-- keys = {
|
|
||||||
-- { "a", mode = { "x", "o" } },
|
|
||||||
-- { "i", mode = { "x", "o" } },
|
|
||||||
-- },
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = function()
|
|
||||||
local ai = require("mini.ai")
|
|
||||||
return {
|
|
||||||
n_lines = 500,
|
|
||||||
custom_textobjects = {
|
|
||||||
o = ai.gen_spec.treesitter({
|
|
||||||
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
|
|
||||||
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
|
|
||||||
}, {}),
|
|
||||||
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }, {}),
|
|
||||||
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }, {}),
|
|
||||||
t = { "<([%p%w]-)%f[^<%w][^<>]->.-</%1>", "^<.->().*()</[^/]->$" },
|
|
||||||
d = { "%f[%d]%d+" }, -- digits
|
|
||||||
e = { -- Word with case
|
|
||||||
{
|
|
||||||
"%u[%l%d]+%f[^%l%d]",
|
|
||||||
"%f[%S][%l%d]+%f[^%l%d]",
|
|
||||||
"%f[%P][%l%d]+%f[^%l%d]",
|
|
||||||
"^[%l%d]+%f[^%l%d]",
|
|
||||||
},
|
|
||||||
"^().*()$",
|
|
||||||
},
|
|
||||||
g = function() -- Whole buffer, similar to `gg` and 'G' motion
|
|
||||||
local from = { line = 1, col = 1 }
|
|
||||||
local to = {
|
|
||||||
line = vim.fn.line("$"),
|
|
||||||
col = math.max(vim.fn.getline("$"):len(), 1),
|
|
||||||
}
|
|
||||||
return { from = from, to = to }
|
|
||||||
end,
|
|
||||||
u = ai.gen_spec.function_call(), -- u for "Usage"
|
|
||||||
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
config = function(_, opts)
|
|
||||||
require("mini.ai").setup(opts)
|
|
||||||
-- register all text objects with which-key
|
|
||||||
LazyVim.on_load("which-key.nvim", function()
|
|
||||||
---@type table<string, string|table>
|
|
||||||
local i = {
|
|
||||||
[" "] = "Whitespace",
|
|
||||||
['"'] = 'Balanced "',
|
|
||||||
["'"] = "Balanced '",
|
|
||||||
["`"] = "Balanced `",
|
|
||||||
["("] = "Balanced (",
|
|
||||||
[")"] = "Balanced ) including white-space",
|
|
||||||
[">"] = "Balanced > including white-space",
|
|
||||||
["<lt>"] = "Balanced <",
|
|
||||||
["]"] = "Balanced ] including white-space",
|
|
||||||
["["] = "Balanced [",
|
|
||||||
["}"] = "Balanced } including white-space",
|
|
||||||
["{"] = "Balanced {",
|
|
||||||
["?"] = "User Prompt",
|
|
||||||
_ = "Underscore",
|
|
||||||
a = "Argument",
|
|
||||||
b = "Balanced ), ], }",
|
|
||||||
c = "Class",
|
|
||||||
d = "Digit(s)",
|
|
||||||
e = "Word in CamelCase & snake_case",
|
|
||||||
f = "Function",
|
|
||||||
g = "Entire file",
|
|
||||||
o = "Block, conditional, loop",
|
|
||||||
q = "Quote `, \", '",
|
|
||||||
t = "Tag",
|
|
||||||
u = "Use/call function & method",
|
|
||||||
U = "Use/call without dot in name",
|
|
||||||
}
|
|
||||||
local a = vim.deepcopy(i)
|
|
||||||
for k, v in pairs(a) do
|
|
||||||
a[k] = v:gsub(" including.*", "")
|
|
||||||
end
|
end
|
||||||
|
)
|
||||||
local ic = vim.deepcopy(i)
|
|
||||||
local ac = vim.deepcopy(a)
|
|
||||||
for key, name in pairs({ n = "Next", l = "Last" }) do
|
|
||||||
i[key] = vim.tbl_extend("force", { name = "Inside " .. name .. " textobject" }, ic)
|
|
||||||
a[key] = vim.tbl_extend("force", { name = "Around " .. name .. " textobject" }, ac)
|
|
||||||
end
|
|
||||||
require("which-key").register({
|
|
||||||
mode = { "o", "x" },
|
|
||||||
i = i,
|
|
||||||
a = a,
|
|
||||||
})
|
|
||||||
end)
|
end)
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -409,74 +409,6 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Automatically highlights other instances of the word under your cursor.
|
|
||||||
-- This works with LSP, Treesitter, and regexp matching to find the other
|
|
||||||
-- instances.
|
|
||||||
{
|
|
||||||
"RRethy/vim-illuminate",
|
|
||||||
event = "LazyFile",
|
|
||||||
opts = {
|
|
||||||
delay = 200,
|
|
||||||
large_file_cutoff = 2000,
|
|
||||||
large_file_overrides = {
|
|
||||||
providers = { "lsp" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
config = function(_, opts)
|
|
||||||
require("illuminate").configure(opts)
|
|
||||||
|
|
||||||
local function map(key, dir, buffer)
|
|
||||||
vim.keymap.set("n", key, function()
|
|
||||||
require("illuminate")["goto_" .. dir .. "_reference"](false)
|
|
||||||
end, { desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", buffer = buffer })
|
|
||||||
end
|
|
||||||
|
|
||||||
map("]]", "next")
|
|
||||||
map("[[", "prev")
|
|
||||||
|
|
||||||
-- also set it after loading ftplugins, since a lot overwrite [[ and ]]
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
|
||||||
callback = function()
|
|
||||||
local buffer = vim.api.nvim_get_current_buf()
|
|
||||||
map("]]", "next", buffer)
|
|
||||||
map("[[", "prev", buffer)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{ "]]", desc = "Next Reference" },
|
|
||||||
{ "[[", desc = "Prev Reference" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- buffer remove
|
|
||||||
{
|
|
||||||
"echasnovski/mini.bufremove",
|
|
||||||
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>bd",
|
|
||||||
function()
|
|
||||||
local bd = require("mini.bufremove").delete
|
|
||||||
if vim.bo.modified then
|
|
||||||
local choice = vim.fn.confirm(("Save changes to %q?"):format(vim.fn.bufname()), "&Yes\n&No\n&Cancel")
|
|
||||||
if choice == 1 then -- Yes
|
|
||||||
vim.cmd.write()
|
|
||||||
bd(0)
|
|
||||||
elseif choice == 2 then -- No
|
|
||||||
bd(0, true)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
bd(0)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
desc = "Delete Buffer",
|
|
||||||
},
|
|
||||||
-- stylua: ignore
|
|
||||||
{ "<leader>bD", function() require("mini.bufremove").delete(0, true) end, desc = "Delete Buffer (Force)" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- better diagnostics list and others
|
-- better diagnostics list and others
|
||||||
{
|
{
|
||||||
"folke/trouble.nvim",
|
"folke/trouble.nvim",
|
||||||
|
|
|
||||||
44
lua/lazyvim/plugins/extras/coding/luasnip.lua
Normal file
44
lua/lazyvim/plugins/extras/coding/luasnip.lua
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
return {
|
||||||
|
"L3MON4D3/LuaSnip",
|
||||||
|
build = (not LazyVim.is_win())
|
||||||
|
and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build'; make install_jsregexp"
|
||||||
|
or nil,
|
||||||
|
dependencies = {
|
||||||
|
{
|
||||||
|
"rafamadriz/friendly-snippets",
|
||||||
|
config = function()
|
||||||
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-cmp",
|
||||||
|
dependencies = {
|
||||||
|
"saadparwaiz1/cmp_luasnip",
|
||||||
|
},
|
||||||
|
opts = function(_, opts)
|
||||||
|
opts.snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
require("luasnip").lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
table.insert(opts.sources, { name = "luasnip" })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
history = true,
|
||||||
|
delete_check_events = "TextChanged",
|
||||||
|
},
|
||||||
|
-- stylua: ignore
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<tab>",
|
||||||
|
function()
|
||||||
|
return require("luasnip").jumpable(1) and "<Plug>luasnip-jump-next" or "<tab>"
|
||||||
|
end,
|
||||||
|
expr = true, silent = true, mode = "i",
|
||||||
|
},
|
||||||
|
{ "<tab>", function() require("luasnip").jump(1) end, mode = "s" },
|
||||||
|
{ "<s-tab>", function() require("luasnip").jump(-1) end, mode = { "i", "s" } },
|
||||||
|
},
|
||||||
|
}
|
||||||
95
lua/lazyvim/plugins/extras/coding/mini-ai.lua
Normal file
95
lua/lazyvim/plugins/extras/coding/mini-ai.lua
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
-- Better text-objects
|
||||||
|
return {
|
||||||
|
"echasnovski/mini.ai",
|
||||||
|
-- keys = {
|
||||||
|
-- { "a", mode = { "x", "o" } },
|
||||||
|
-- { "i", mode = { "x", "o" } },
|
||||||
|
-- },
|
||||||
|
event = "VeryLazy",
|
||||||
|
opts = function()
|
||||||
|
local ai = require("mini.ai")
|
||||||
|
return {
|
||||||
|
n_lines = 500,
|
||||||
|
custom_textobjects = {
|
||||||
|
o = ai.gen_spec.treesitter({
|
||||||
|
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
|
||||||
|
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
|
||||||
|
}, {}),
|
||||||
|
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }, {}),
|
||||||
|
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }, {}),
|
||||||
|
t = { "<([%p%w]-)%f[^<%w][^<>]->.-</%1>", "^<.->().*()</[^/]->$" },
|
||||||
|
d = { "%f[%d]%d+" }, -- digits
|
||||||
|
e = { -- Word with case
|
||||||
|
{
|
||||||
|
"%u[%l%d]+%f[^%l%d]",
|
||||||
|
"%f[%S][%l%d]+%f[^%l%d]",
|
||||||
|
"%f[%P][%l%d]+%f[^%l%d]",
|
||||||
|
"^[%l%d]+%f[^%l%d]",
|
||||||
|
},
|
||||||
|
"^().*()$",
|
||||||
|
},
|
||||||
|
g = function() -- Whole buffer, similar to `gg` and 'G' motion
|
||||||
|
local from = { line = 1, col = 1 }
|
||||||
|
local to = {
|
||||||
|
line = vim.fn.line("$"),
|
||||||
|
col = math.max(vim.fn.getline("$"):len(), 1),
|
||||||
|
}
|
||||||
|
return { from = from, to = to }
|
||||||
|
end,
|
||||||
|
u = ai.gen_spec.function_call(), -- u for "Usage"
|
||||||
|
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
config = function(_, opts)
|
||||||
|
require("mini.ai").setup(opts)
|
||||||
|
-- register all text objects with which-key
|
||||||
|
LazyVim.on_load("which-key.nvim", function()
|
||||||
|
---@type table<string, string|table>
|
||||||
|
local i = {
|
||||||
|
[" "] = "Whitespace",
|
||||||
|
['"'] = 'Balanced "',
|
||||||
|
["'"] = "Balanced '",
|
||||||
|
["`"] = "Balanced `",
|
||||||
|
["("] = "Balanced (",
|
||||||
|
[")"] = "Balanced ) including white-space",
|
||||||
|
[">"] = "Balanced > including white-space",
|
||||||
|
["<lt>"] = "Balanced <",
|
||||||
|
["]"] = "Balanced ] including white-space",
|
||||||
|
["["] = "Balanced [",
|
||||||
|
["}"] = "Balanced } including white-space",
|
||||||
|
["{"] = "Balanced {",
|
||||||
|
["?"] = "User Prompt",
|
||||||
|
_ = "Underscore",
|
||||||
|
a = "Argument",
|
||||||
|
b = "Balanced ), ], }",
|
||||||
|
c = "Class",
|
||||||
|
d = "Digit(s)",
|
||||||
|
e = "Word in CamelCase & snake_case",
|
||||||
|
f = "Function",
|
||||||
|
g = "Entire file",
|
||||||
|
o = "Block, conditional, loop",
|
||||||
|
q = "Quote `, \", '",
|
||||||
|
t = "Tag",
|
||||||
|
u = "Use/call function & method",
|
||||||
|
U = "Use/call without dot in name",
|
||||||
|
}
|
||||||
|
local a = vim.deepcopy(i)
|
||||||
|
for k, v in pairs(a) do
|
||||||
|
a[k] = v:gsub(" including.*", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
local ic = vim.deepcopy(i)
|
||||||
|
local ac = vim.deepcopy(a)
|
||||||
|
for key, name in pairs({ n = "Next", l = "Last" }) do
|
||||||
|
i[key] = vim.tbl_extend("force", { name = "Inside " .. name .. " textobject" }, ic)
|
||||||
|
a[key] = vim.tbl_extend("force", { name = "Around " .. name .. " textobject" }, ac)
|
||||||
|
end
|
||||||
|
require("which-key").register({
|
||||||
|
mode = { "o", "x" },
|
||||||
|
i = i,
|
||||||
|
a = a,
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
}
|
||||||
13
lua/lazyvim/plugins/extras/coding/mini-comment.lua
Normal file
13
lua/lazyvim/plugins/extras/coding/mini-comment.lua
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"echasnovski/mini.comment",
|
||||||
|
event = "VeryLazy",
|
||||||
|
opts = {
|
||||||
|
options = {
|
||||||
|
custom_commentstring = function()
|
||||||
|
return require("ts_context_commentstring.internal").calculate_commentstring() or vim.bo.commentstring
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
35
lua/lazyvim/plugins/extras/coding/mini-surround.lua
Normal file
35
lua/lazyvim/plugins/extras/coding/mini-surround.lua
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
-- Fast and feature-rich surround actions. For text that includes
|
||||||
|
-- surrounding characters like brackets or quotes, this allows you
|
||||||
|
-- to select the text inside, change or modify the surrounding characters,
|
||||||
|
-- and more.
|
||||||
|
return {
|
||||||
|
"echasnovski/mini.surround",
|
||||||
|
keys = function(_, keys)
|
||||||
|
-- Populate the keys based on the user's options
|
||||||
|
local opts = LazyVim.opts("mini.surround")
|
||||||
|
local mappings = {
|
||||||
|
{ opts.mappings.add, desc = "Add Surrounding", mode = { "n", "v" } },
|
||||||
|
{ opts.mappings.delete, desc = "Delete Surrounding" },
|
||||||
|
{ opts.mappings.find, desc = "Find Right Surrounding" },
|
||||||
|
{ opts.mappings.find_left, desc = "Find Left Surrounding" },
|
||||||
|
{ opts.mappings.highlight, desc = "Highlight Surrounding" },
|
||||||
|
{ opts.mappings.replace, desc = "Replace Surrounding" },
|
||||||
|
{ opts.mappings.update_n_lines, desc = "Update `MiniSurround.config.n_lines`" },
|
||||||
|
}
|
||||||
|
mappings = vim.tbl_filter(function(m)
|
||||||
|
return m[1] and #m[1] > 0
|
||||||
|
end, mappings)
|
||||||
|
return vim.list_extend(mappings, keys)
|
||||||
|
end,
|
||||||
|
opts = {
|
||||||
|
mappings = {
|
||||||
|
add = "gsa", -- Add surrounding in Normal and Visual modes
|
||||||
|
delete = "gsd", -- Delete surrounding
|
||||||
|
find = "gsf", -- Find surrounding (to the right)
|
||||||
|
find_left = "gsF", -- Find surrounding (to the left)
|
||||||
|
highlight = "gsh", -- Highlight surrounding
|
||||||
|
replace = "gsr", -- Replace surrounding
|
||||||
|
update_n_lines = "gsn", -- Update `n_lines`
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
if not vim.snippet then
|
|
||||||
LazyVim.warn("Native snippets are only supported on Neovim >= 0.10.0")
|
|
||||||
return {}
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
desc = "Use native snippets instead of LuaSnip. Only works on Neovim >= 0.10!",
|
|
||||||
{
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"nvim-cmp",
|
|
||||||
dependencies = {
|
|
||||||
{ "rafamadriz/friendly-snippets" },
|
|
||||||
{ "garymjr/nvim-snippets", opts = { friendly_snippets = true } },
|
|
||||||
},
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.snippet = {
|
|
||||||
expand = function(args)
|
|
||||||
vim.snippet.expand(args.body)
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
table.insert(opts.sources, { name = "snippets" })
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<Tab>",
|
|
||||||
function()
|
|
||||||
if vim.snippet.active({ direction = 1 }) then
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.snippet.jump(1)
|
|
||||||
end)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
return "<Tab>"
|
|
||||||
end,
|
|
||||||
expr = true,
|
|
||||||
silent = true,
|
|
||||||
mode = "i",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<Tab>",
|
|
||||||
function()
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.snippet.jump(1)
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
silent = true,
|
|
||||||
mode = "s",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<S-Tab>",
|
|
||||||
function()
|
|
||||||
if vim.snippet.active({ direction = -1 }) then
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.snippet.jump(-1)
|
|
||||||
end)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
return "<S-Tab>"
|
|
||||||
end,
|
|
||||||
expr = true,
|
|
||||||
silent = true,
|
|
||||||
mode = { "i", "s" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -121,7 +121,15 @@ return {
|
||||||
|
|
||||||
-- setup dap config by VsCode launch.json file
|
-- setup dap config by VsCode launch.json file
|
||||||
local vscode = require("dap.ext.vscode")
|
local vscode = require("dap.ext.vscode")
|
||||||
vscode.json_decode = require("neoconf.json.jsonc").decode_jsonc
|
local _filetypes = require("mason-nvim-dap.mappings.filetypes")
|
||||||
vscode.load_launchjs()
|
local filetypes = vim.tbl_deep_extend("force", _filetypes, {
|
||||||
|
["node"] = { "javascriptreact", "typescriptreact", "typescript", "javascript" },
|
||||||
|
["pwa-node"] = { "javascriptreact", "typescriptreact", "typescript", "javascript" },
|
||||||
|
})
|
||||||
|
local json = require("plenary.json")
|
||||||
|
vscode.json_decode = function(str)
|
||||||
|
return vim.json.decode(json.json_strip_comments(str))
|
||||||
|
end
|
||||||
|
vscode.load_launchjs(nil, filetypes)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
45
lua/lazyvim/plugins/extras/editor/illuminate.lua
Normal file
45
lua/lazyvim/plugins/extras/editor/illuminate.lua
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
-- Automatically highlights other instances of the word under your cursor.
|
||||||
|
-- This works with LSP, Treesitter, and regexp matching to find the other
|
||||||
|
-- instances.
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"RRethy/vim-illuminate",
|
||||||
|
event = "LazyFile",
|
||||||
|
opts = {
|
||||||
|
delay = 200,
|
||||||
|
large_file_cutoff = 2000,
|
||||||
|
large_file_overrides = {
|
||||||
|
providers = { "lsp" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require("illuminate").configure(opts)
|
||||||
|
|
||||||
|
local function map(key, dir, buffer)
|
||||||
|
vim.keymap.set("n", key, function()
|
||||||
|
require("illuminate")["goto_" .. dir .. "_reference"](false)
|
||||||
|
end, { desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", buffer = buffer })
|
||||||
|
end
|
||||||
|
|
||||||
|
map("]]", "next")
|
||||||
|
map("[[", "prev")
|
||||||
|
|
||||||
|
-- also set it after loading ftplugins, since a lot overwrite [[ and ]]
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
callback = function()
|
||||||
|
local buffer = vim.api.nvim_get_current_buf()
|
||||||
|
map("]]", "next", buffer)
|
||||||
|
map("[[", "prev", buffer)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
keys = {
|
||||||
|
{ "]]", desc = "Next Reference" },
|
||||||
|
{ "[[", desc = "Prev Reference" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
opts = { document_highlight = { enabed = false } },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -38,6 +38,7 @@ return {
|
||||||
-- rename surround mappings from gs to gz to prevent conflict with leap
|
-- rename surround mappings from gs to gz to prevent conflict with leap
|
||||||
{
|
{
|
||||||
"echasnovski/mini.surround",
|
"echasnovski/mini.surround",
|
||||||
|
optional = true,
|
||||||
opts = {
|
opts = {
|
||||||
mappings = {
|
mappings = {
|
||||||
add = "gza", -- Add surrounding in Normal and Visual modes
|
add = "gza", -- Add surrounding in Normal and Visual modes
|
||||||
|
|
|
||||||
42
lua/lazyvim/plugins/extras/ui/mini-indentscope.lua
Normal file
42
lua/lazyvim/plugins/extras/ui/mini-indentscope.lua
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
return {
|
||||||
|
-- Active indent guide and indent text objects. When you're browsing
|
||||||
|
-- code, this highlights the current level of indentation, and animates
|
||||||
|
-- the highlighting.
|
||||||
|
{
|
||||||
|
"echasnovski/mini.indentscope",
|
||||||
|
version = false, -- wait till new 0.7.0 release to put it back on semver
|
||||||
|
event = "LazyFile",
|
||||||
|
opts = {
|
||||||
|
-- symbol = "▏",
|
||||||
|
symbol = "│",
|
||||||
|
options = { try_as_border = true },
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = {
|
||||||
|
"help",
|
||||||
|
"alpha",
|
||||||
|
"dashboard",
|
||||||
|
"neo-tree",
|
||||||
|
"Trouble",
|
||||||
|
"trouble",
|
||||||
|
"lazy",
|
||||||
|
"mason",
|
||||||
|
"notify",
|
||||||
|
"toggleterm",
|
||||||
|
"lazyterm",
|
||||||
|
},
|
||||||
|
callback = function()
|
||||||
|
vim.b.miniindentscope_disable = true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lukas-reineke/indent-blankline.nvim",
|
||||||
|
event = "LazyFile",
|
||||||
|
opts = {
|
||||||
|
scope = { enabled = false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
21
lua/lazyvim/plugins/extras/ui/treesitter-context.lua
Normal file
21
lua/lazyvim/plugins/extras/ui/treesitter-context.lua
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
-- Show context of the current function
|
||||||
|
return {
|
||||||
|
"nvim-treesitter/nvim-treesitter-context",
|
||||||
|
event = "LazyFile",
|
||||||
|
opts = { mode = "cursor", max_lines = 3 },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>ut",
|
||||||
|
function()
|
||||||
|
local tsc = require("treesitter-context")
|
||||||
|
tsc.toggle()
|
||||||
|
if LazyVim.inject.get_upvalue(tsc.toggle, "enabled") then
|
||||||
|
LazyVim.info("Enabled Treesitter Context", { title = "Option" })
|
||||||
|
else
|
||||||
|
LazyVim.warn("Disabled Treesitter Context", { title = "Option" })
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
desc = "Toggle Treesitter Context",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
106
lua/lazyvim/plugins/extras/ui/treesitter-rewrite.lua
Normal file
106
lua/lazyvim/plugins/extras/ui/treesitter-rewrite.lua
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
local Config = require("lazyvim.config")
|
||||||
|
|
||||||
|
-- backwards compatibility with the old treesitter config for adding custom parsers
|
||||||
|
local function patch()
|
||||||
|
local parsers = require("nvim-treesitter.parsers")
|
||||||
|
parsers.get_parser_configs = setmetatable({}, {
|
||||||
|
__call = function()
|
||||||
|
return parsers
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.tbl_contains(Config.json.data.extras, "lazyvim.plugins.extras.ui.treesitter-rewrite") then
|
||||||
|
if vim.fn.executable("tree-sitter") == 0 then
|
||||||
|
LazyVim.error("**treesitter-rewrite** requires the `tree-sitter` executable to be installed")
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.fn.has("nvim-0.10") == 0 then
|
||||||
|
LazyVim.error("**treesitter-rewrite** requires Neovim >= 0.10")
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
version = false, -- last release is way too old and doesn't work on Windows
|
||||||
|
branch = "main",
|
||||||
|
build = ":TSUpdate",
|
||||||
|
lazy = false,
|
||||||
|
cmd = {},
|
||||||
|
opts = function()
|
||||||
|
patch()
|
||||||
|
return {
|
||||||
|
highlight = { enable = true },
|
||||||
|
indent = { enable = true },
|
||||||
|
ensure_install = {
|
||||||
|
"bash",
|
||||||
|
"c",
|
||||||
|
"diff",
|
||||||
|
"html",
|
||||||
|
"javascript",
|
||||||
|
"jsdoc",
|
||||||
|
"json",
|
||||||
|
"jsonc",
|
||||||
|
"lua",
|
||||||
|
"luadoc",
|
||||||
|
"luap",
|
||||||
|
"markdown",
|
||||||
|
"markdown_inline",
|
||||||
|
"python",
|
||||||
|
"query",
|
||||||
|
"regex",
|
||||||
|
"toml",
|
||||||
|
"tsx",
|
||||||
|
"typescript",
|
||||||
|
"vim",
|
||||||
|
"vimdoc",
|
||||||
|
"xml",
|
||||||
|
"yaml",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
init = function() end,
|
||||||
|
---@param opts TSConfig
|
||||||
|
config = function(_, opts)
|
||||||
|
---@return string[]
|
||||||
|
local function norm(ensure)
|
||||||
|
return ensure == nil and {} or type(ensure) == "string" and { ensure } or ensure
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ensure_installed is deprecated, but still supported
|
||||||
|
opts.ensure_install = LazyVim.dedup(vim.list_extend(norm(opts.ensure_install), norm(opts.ensure_installed)))
|
||||||
|
|
||||||
|
require("nvim-treesitter").setup(opts)
|
||||||
|
patch()
|
||||||
|
|
||||||
|
-- backwards compatibility with the old treesitter config for indent
|
||||||
|
if vim.tbl_get(opts, "indent", "enable") then
|
||||||
|
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- backwards compatibility with the old treesitter config for highlight
|
||||||
|
if vim.tbl_get(opts, "highlight", "enable") then
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
callback = function()
|
||||||
|
pcall(vim.treesitter.start)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"windwp/nvim-ts-autotag",
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"RRethy/vim-illuminate",
|
||||||
|
enabled = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
8
lua/lazyvim/plugins/extras/util/startuptime.lua
Normal file
8
lua/lazyvim/plugins/extras/util/startuptime.lua
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- measure startuptime
|
||||||
|
return {
|
||||||
|
"dstein64/vim-startuptime",
|
||||||
|
cmd = "StartupTime",
|
||||||
|
config = function()
|
||||||
|
vim.g.startuptime_tries = 10
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
@ -54,9 +54,7 @@ return {
|
||||||
priority = 100,
|
priority = 100,
|
||||||
primary = true,
|
primary = true,
|
||||||
format = function(buf)
|
format = function(buf)
|
||||||
local plugin = require("lazy.core.config").plugins["conform.nvim"]
|
local opts = LazyVim.opts("conform.nvim")
|
||||||
local Plugin = require("lazy.core.plugin")
|
|
||||||
local opts = Plugin.values(plugin, "opts", false)
|
|
||||||
require("conform").format(LazyVim.merge({}, opts.format, { bufnr = buf }))
|
require("conform").format(LazyVim.merge({}, opts.format, { bufnr = buf }))
|
||||||
end,
|
end,
|
||||||
sources = function(buf)
|
sources = function(buf)
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ return {
|
||||||
-- Be aware that you also will need to properly configure your LSP server to
|
-- Be aware that you also will need to properly configure your LSP server to
|
||||||
-- provide the inlay hints.
|
-- provide the inlay hints.
|
||||||
inlay_hints = {
|
inlay_hints = {
|
||||||
enabled = false,
|
enabled = true,
|
||||||
},
|
},
|
||||||
-- Enable this to enable the builtin LSP code lenses on Neovim >= 0.10.0
|
-- Enable this to enable the builtin LSP code lenses on Neovim >= 0.10.0
|
||||||
-- Be aware that you also will need to properly configure your LSP server to
|
-- Be aware that you also will need to properly configure your LSP server to
|
||||||
|
|
@ -46,6 +46,10 @@ return {
|
||||||
codelens = {
|
codelens = {
|
||||||
enabled = false,
|
enabled = false,
|
||||||
},
|
},
|
||||||
|
-- Enable lsp cursor word highlighting
|
||||||
|
document_highlight = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
-- add any global capabilities here
|
-- add any global capabilities here
|
||||||
capabilities = {},
|
capabilities = {},
|
||||||
-- options for vim.lsp.buf.format
|
-- options for vim.lsp.buf.format
|
||||||
|
|
@ -106,8 +110,7 @@ return {
|
||||||
---@param opts PluginLspOpts
|
---@param opts PluginLspOpts
|
||||||
config = function(_, opts)
|
config = function(_, opts)
|
||||||
if LazyVim.has("neoconf.nvim") then
|
if LazyVim.has("neoconf.nvim") then
|
||||||
local plugin = require("lazy.core.config").spec.plugins["neoconf.nvim"]
|
require("neoconf").setup(LazyVim.opts("neoconf.nvim"))
|
||||||
require("neoconf").setup(require("lazy.core.plugin").values(plugin, "opts", false))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- setup autoformat
|
-- setup autoformat
|
||||||
|
|
@ -129,6 +132,8 @@ return {
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
LazyVim.lsp.words.setup(opts.document_highlight)
|
||||||
|
|
||||||
-- diagnostics signs
|
-- diagnostics signs
|
||||||
if vim.fn.has("nvim-0.10.0") == 0 then
|
if vim.fn.has("nvim-0.10.0") == 0 then
|
||||||
if type(opts.diagnostics.signs) ~= "boolean" then
|
if type(opts.diagnostics.signs) ~= "boolean" then
|
||||||
|
|
@ -140,6 +145,7 @@ return {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if vim.fn.has("nvim-0.10") == 1 then
|
||||||
-- inlay hints
|
-- inlay hints
|
||||||
if opts.inlay_hints.enabled then
|
if opts.inlay_hints.enabled then
|
||||||
LazyVim.lsp.on_attach(function(client, buffer)
|
LazyVim.lsp.on_attach(function(client, buffer)
|
||||||
|
|
@ -162,6 +168,7 @@ return {
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if type(opts.diagnostics.virtual_text) == "table" and opts.diagnostics.virtual_text.prefix == "icons" then
|
if type(opts.diagnostics.virtual_text) == "table" and opts.diagnostics.virtual_text.prefix == "icons" then
|
||||||
opts.diagnostics.virtual_text.prefix = vim.fn.has("nvim-0.10.0") == 0 and "●"
|
opts.diagnostics.virtual_text.prefix = vim.fn.has("nvim-0.10.0") == 0 and "●"
|
||||||
|
|
|
||||||
|
|
@ -118,29 +118,6 @@ return {
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Show context of the current function
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter-context",
|
|
||||||
event = "LazyFile",
|
|
||||||
enabled = true,
|
|
||||||
opts = { mode = "cursor", max_lines = 3 },
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>ut",
|
|
||||||
function()
|
|
||||||
local tsc = require("treesitter-context")
|
|
||||||
tsc.toggle()
|
|
||||||
if LazyVim.inject.get_upvalue(tsc.toggle, "enabled") then
|
|
||||||
LazyVim.info("Enabled Treesitter Context", { title = "Option" })
|
|
||||||
else
|
|
||||||
LazyVim.warn("Disabled Treesitter Context", { title = "Option" })
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
desc = "Toggle Treesitter Context",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Automatically add closing tags for HTML and JSX
|
-- Automatically add closing tags for HTML and JSX
|
||||||
{
|
{
|
||||||
"windwp/nvim-ts-autotag",
|
"windwp/nvim-ts-autotag",
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ return {
|
||||||
char = "│",
|
char = "│",
|
||||||
tab_char = "│",
|
tab_char = "│",
|
||||||
},
|
},
|
||||||
scope = { enabled = false },
|
scope = { show_start = false, show_end = false },
|
||||||
exclude = {
|
exclude = {
|
||||||
filetypes = {
|
filetypes = {
|
||||||
"help",
|
"help",
|
||||||
|
|
@ -239,40 +239,6 @@ return {
|
||||||
main = "ibl",
|
main = "ibl",
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Active indent guide and indent text objects. When you're browsing
|
|
||||||
-- code, this highlights the current level of indentation, and animates
|
|
||||||
-- the highlighting.
|
|
||||||
{
|
|
||||||
"echasnovski/mini.indentscope",
|
|
||||||
version = false, -- wait till new 0.7.0 release to put it back on semver
|
|
||||||
event = "LazyFile",
|
|
||||||
opts = {
|
|
||||||
-- symbol = "▏",
|
|
||||||
symbol = "│",
|
|
||||||
options = { try_as_border = true },
|
|
||||||
},
|
|
||||||
init = function()
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
|
||||||
pattern = {
|
|
||||||
"help",
|
|
||||||
"alpha",
|
|
||||||
"dashboard",
|
|
||||||
"neo-tree",
|
|
||||||
"Trouble",
|
|
||||||
"trouble",
|
|
||||||
"lazy",
|
|
||||||
"mason",
|
|
||||||
"notify",
|
|
||||||
"toggleterm",
|
|
||||||
"lazyterm",
|
|
||||||
},
|
|
||||||
callback = function()
|
|
||||||
vim.b.miniindentscope_disable = true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Displays a popup with possible key bindings of the command you started typing
|
-- Displays a popup with possible key bindings of the command you started typing
|
||||||
{
|
{
|
||||||
"folke/which-key.nvim",
|
"folke/which-key.nvim",
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,5 @@
|
||||||
return {
|
return {
|
||||||
|
|
||||||
-- measure startuptime
|
|
||||||
{
|
|
||||||
"dstein64/vim-startuptime",
|
|
||||||
cmd = "StartupTime",
|
|
||||||
config = function()
|
|
||||||
vim.g.startuptime_tries = 10
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Session management. This saves your session in the background,
|
-- Session management. This saves your session in the background,
|
||||||
-- keeping track of open buffers, window arrangement, and more.
|
-- keeping track of open buffers, window arrangement, and more.
|
||||||
-- You can restore sessions when returning through the dashboard.
|
-- You can restore sessions when returning through the dashboard.
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ end
|
||||||
|
|
||||||
---@param name string
|
---@param name string
|
||||||
function M.opts(name)
|
function M.opts(name)
|
||||||
local plugin = require("lazy.core.config").plugins[name]
|
local plugin = require("lazy.core.config").spec.plugins[name]
|
||||||
if not plugin then
|
if not plugin then
|
||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
|
|
@ -170,4 +170,19 @@ function M.safe_keymap_set(mode, lhs, rhs, opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@generic T
|
||||||
|
---@param list T[]
|
||||||
|
---@return T[]
|
||||||
|
function M.dedup(list)
|
||||||
|
local ret = {}
|
||||||
|
local seen = {}
|
||||||
|
for _, v in ipairs(list) do
|
||||||
|
if not seen[v] then
|
||||||
|
table.insert(ret, v)
|
||||||
|
seen[v] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -31,4 +31,20 @@ function M.get_upvalue(func, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.set_upvalue(func, name, value)
|
||||||
|
local i = 1
|
||||||
|
while true do
|
||||||
|
local n = debug.getupvalue(func, i)
|
||||||
|
if not n then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if n == name then
|
||||||
|
debug.setupvalue(func, i, value)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
LazyVim.error("upvalue not found: " .. name)
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ function M.get_clients(opts)
|
||||||
return opts and opts.filter and vim.tbl_filter(opts.filter, ret) or ret
|
return opts and opts.filter and vim.tbl_filter(opts.filter, ret) or ret
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param on_attach fun(client, buffer)
|
---@param on_attach fun(client:lsp.Client, buffer)
|
||||||
function M.on_attach(on_attach)
|
function M.on_attach(on_attach)
|
||||||
vim.api.nvim_create_autocmd("LspAttach", {
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
callback = function(args)
|
callback = function(args)
|
||||||
|
|
@ -125,4 +125,84 @@ function M.format(opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@alias LspWord {from:{[1]:number, [2]:number}, to:{[1]:number, [2]:number}, current?:boolean} 1-0 indexed
|
||||||
|
M.words = {}
|
||||||
|
M.words.ns = vim.api.nvim_create_namespace("vim_lsp_references")
|
||||||
|
|
||||||
|
---@param opts? {enabled?: boolean}
|
||||||
|
function M.words.setup(opts)
|
||||||
|
opts = opts or {}
|
||||||
|
if not opts.enabled then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local handler = vim.lsp.handlers["textDocument/documentHighlight"]
|
||||||
|
vim.lsp.handlers["textDocument/documentHighlight"] = function(err, result, ctx, config)
|
||||||
|
if not vim.api.nvim_buf_is_loaded(ctx.bufnr) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return handler(err, result, ctx, config)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.on_attach(function(client, buf)
|
||||||
|
if client.supports_method("textDocument/documentHighlight") then
|
||||||
|
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI", "CursorMoved", "CursorMovedI" }, {
|
||||||
|
group = vim.api.nvim_create_augroup("lsp_word_" .. buf, { clear = true }),
|
||||||
|
buffer = buf,
|
||||||
|
callback = function(ev)
|
||||||
|
if not M.words.at() then
|
||||||
|
if ev.event:find("CursorMoved") then
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
else
|
||||||
|
vim.lsp.buf.document_highlight()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.keymap.set("n", "]]", function()
|
||||||
|
M.words.jump(vim.v.count1)
|
||||||
|
end, { buffer = buf, desc = "Next reference" })
|
||||||
|
vim.keymap.set("n", "[[", function()
|
||||||
|
M.words.jump(-vim.v.count1)
|
||||||
|
end, { buffer = buf, desc = "Previous reference" })
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
---@return LspWord[]
|
||||||
|
function M.words.get()
|
||||||
|
local cursor = vim.api.nvim_win_get_cursor(0)
|
||||||
|
return vim.tbl_map(function(extmark)
|
||||||
|
local ret = {
|
||||||
|
from = { extmark[2] + 1, extmark[3] },
|
||||||
|
to = { extmark[4].end_row + 1, extmark[4].end_col },
|
||||||
|
}
|
||||||
|
if cursor[1] >= ret.from[1] and cursor[1] <= ret.to[1] and cursor[2] >= ret.from[2] and cursor[2] <= ret.to[2] then
|
||||||
|
ret.current = true
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end, vim.api.nvim_buf_get_extmarks(0, M.words.ns, 0, -1, { details = true }))
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param words? LspWord[]
|
||||||
|
---@return LspWord?, number?
|
||||||
|
function M.words.at(words)
|
||||||
|
for idx, word in ipairs(words or M.words.get()) do
|
||||||
|
if word.current then
|
||||||
|
return word, idx
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.words.jump(count)
|
||||||
|
local words = M.words.get()
|
||||||
|
local _, idx = M.words.at(words)
|
||||||
|
if not idx then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local target = words[idx + count]
|
||||||
|
if target then
|
||||||
|
vim.api.nvim_win_set_cursor(0, target.from)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ M.deprecated_extras = {
|
||||||
["lazyvim.plugins.extras.formatting.conform"] = "`conform.nvim` is now the default **LazyVim** formatter.",
|
["lazyvim.plugins.extras.formatting.conform"] = "`conform.nvim` is now the default **LazyVim** formatter.",
|
||||||
["lazyvim.plugins.extras.linting.nvim-lint"] = "`nvim-lint` is now the default **LazyVim** linter.",
|
["lazyvim.plugins.extras.linting.nvim-lint"] = "`nvim-lint` is now the default **LazyVim** linter.",
|
||||||
["lazyvim.plugins.extras.ui.dashboard"] = "`dashboard.nvim` is now the default **LazyVim** starter.",
|
["lazyvim.plugins.extras.ui.dashboard"] = "`dashboard.nvim` is now the default **LazyVim** starter.",
|
||||||
|
["lazyvim.plugins.extras.coding.native_snippets"] = "Native snippets are now the default for **Neovim >= 0.10**",
|
||||||
}
|
}
|
||||||
|
|
||||||
M.deprecated_modules = {
|
M.deprecated_modules = {
|
||||||
|
|
@ -91,7 +92,7 @@ function M.fix_imports()
|
||||||
Plugin.Spec.import = LazyVim.inject.args(Plugin.Spec.import, function(_, spec)
|
Plugin.Spec.import = LazyVim.inject.args(Plugin.Spec.import, function(_, spec)
|
||||||
local dep = M.deprecated_extras[spec and spec.import]
|
local dep = M.deprecated_extras[spec and spec.import]
|
||||||
if dep then
|
if dep then
|
||||||
dep = dep .. "\n" .. "Please remove the extra to hide this warning."
|
dep = dep .. "\n" .. "Please remove the extra from `lazyvim.json` to hide this warning."
|
||||||
LazyVim.warn(dep, { title = "LazyVim", once = true, stacktrace = true, stacklevel = 6 })
|
LazyVim.warn(dep, { title = "LazyVim", once = true, stacktrace = true, stacklevel = 6 })
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,9 @@ local enabled = true
|
||||||
function M.diagnostics()
|
function M.diagnostics()
|
||||||
-- if this Neovim version supports checking if diagnostics are enabled
|
-- if this Neovim version supports checking if diagnostics are enabled
|
||||||
-- then use that for the current state
|
-- then use that for the current state
|
||||||
if vim.diagnostic.is_disabled then
|
if vim.diagnostic.is_enabled then
|
||||||
|
enabled = vim.diagnostic.is_enabled()
|
||||||
|
elseif vim.diagnostic.is_disabled then
|
||||||
enabled = not vim.diagnostic.is_disabled()
|
enabled = not vim.diagnostic.is_disabled()
|
||||||
end
|
end
|
||||||
enabled = not enabled
|
enabled = not enabled
|
||||||
|
|
|
||||||
|
|
@ -208,4 +208,43 @@ function M.foldexpr()
|
||||||
return "0"
|
return "0"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.bufremove()
|
||||||
|
local buf = vim.api.nvim_get_current_buf()
|
||||||
|
|
||||||
|
if vim.bo.modified then
|
||||||
|
local choice = vim.fn.confirm(("Save changes to %q?"):format(vim.fn.bufname()), "&Yes\n&No\n&Cancel")
|
||||||
|
if choice == 0 then -- Cancel
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if choice == 1 then -- Yes
|
||||||
|
vim.cmd.write()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, win in ipairs(vim.fn.win_findbuf(buf)) do
|
||||||
|
vim.api.nvim_win_call(win, function()
|
||||||
|
if not vim.api.nvim_win_is_valid(win) or vim.api.nvim_win_get_buf(win) ~= buf then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
-- Try using alternate buffer
|
||||||
|
local alt = vim.fn.bufnr("#")
|
||||||
|
if alt ~= buf and vim.fn.buflisted(alt) == 1 then
|
||||||
|
vim.api.nvim_win_set_buf(win, alt)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Try using previous buffer
|
||||||
|
local has_previous = pcall(vim.cmd, "bprevious")
|
||||||
|
if has_previous and buf ~= vim.api.nvim_win_get_buf(win) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create new listed buffer
|
||||||
|
local new_buf = vim.api.nvim_create_buf(true, false)
|
||||||
|
vim.api.nvim_win_set_buf(win, new_buf)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
vim.api.nvim_buf_delete(buf, { force = true })
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue