nvim: Add mini.ai textobjects from lazyvim
Shamelessly stolen from http://www.lazyvim.org/plugins/coding#miniai, allows us to select in/around: [c]lass, [f]unction, [d]igits, MultiCas[e] words, [g]lobal buffer, [u]sage of functions (function calls) or the last part of a function [Usage] and the current code bl[o]ck (loop, conditional or block). Super useful!
This commit is contained in:
parent
be9b5b9297
commit
368a6fcb37
1 changed files with 39 additions and 2 deletions
|
|
@ -210,8 +210,45 @@ return {
|
||||||
"echasnovski/mini.nvim",
|
"echasnovski/mini.nvim",
|
||||||
event = { "InsertEnter", "VeryLazy" },
|
event = { "InsertEnter", "VeryLazy" },
|
||||||
config = function()
|
config = function()
|
||||||
-- manually create lazy loading scenarios
|
local ai = require("mini.ai")
|
||||||
require("mini.ai").setup()
|
local function ai_buffer(ai_type)
|
||||||
|
local start_line, end_line = 1, vim.fn.line("$")
|
||||||
|
if ai_type == "i" then
|
||||||
|
-- Skip first and last blank lines for `i` textobject
|
||||||
|
local first_nonblank, last_nonblank = vim.fn.nextnonblank(start_line), vim.fn.prevnonblank(end_line)
|
||||||
|
-- Do nothing for buffer with all blanks
|
||||||
|
if first_nonblank == 0 or last_nonblank == 0 then
|
||||||
|
return { from = { line = start_line, col = 1 } }
|
||||||
|
end
|
||||||
|
start_line, end_line = first_nonblank, last_nonblank
|
||||||
|
end
|
||||||
|
|
||||||
|
local to_col = math.max(vim.fn.getline(end_line):len(), 1)
|
||||||
|
return { from = { line = start_line, col = 1 }, to = { line = end_line, col = to_col } }
|
||||||
|
end
|
||||||
|
ai.setup({
|
||||||
|
custom_textobjects = {
|
||||||
|
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }), -- class
|
||||||
|
d = { "%f[%d]%d+" }, -- digits
|
||||||
|
e = { -- single part of MultiCaseWords
|
||||||
|
{
|
||||||
|
"%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]",
|
||||||
|
},
|
||||||
|
"^().*()$",
|
||||||
|
},
|
||||||
|
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }), -- function
|
||||||
|
g = ai_buffer, -- buffer with or without whitespace
|
||||||
|
o = ai.gen_spec.treesitter({ -- current 'codeblock'
|
||||||
|
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
|
||||||
|
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
|
||||||
|
}),
|
||||||
|
u = ai.gen_spec.function_call(), -- function [u]sage
|
||||||
|
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- function [U]sage of last dot element
|
||||||
|
},
|
||||||
|
})
|
||||||
-- Align tables and other alignable things
|
-- Align tables and other alignable things
|
||||||
require("mini.align").setup({})
|
require("mini.align").setup({})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue