update
This commit is contained in:
35 files changed
+1155
-1236
No files matched your search
@@ -0,0 +1,35 @@
|
||||
local ai = require('mini.ai')
|
||||
|
||||
ai.setup({
|
||||
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>', '^<.->().*()</[^/]->$' },
|
||||
},
|
||||
|
||||
mappings = {
|
||||
-- Main textobject prefixes
|
||||
around = 'a',
|
||||
inside = 'i',
|
||||
|
||||
-- Next/last variants
|
||||
around_next = 'an',
|
||||
inside_next = 'in',
|
||||
around_last = 'al',
|
||||
inside_last = 'il',
|
||||
|
||||
-- Move cursor to corresponding edge of `a` textobject
|
||||
goto_left = 'g[',
|
||||
goto_right = 'g]',
|
||||
},
|
||||
|
||||
-- How to search for object
|
||||
-- 'cover', 'cover_or_next', 'cover_or_prev','cover_or_nearest', 'next', 'previous', 'nearest'.
|
||||
search_method = 'cover_or_next',
|
||||
n_lines = 500,
|
||||
silent = false,
|
||||
})
|
||||
@@ -0,0 +1,18 @@
|
||||
local bracketed = require('mini.bracketed')
|
||||
|
||||
bracketed.setup({
|
||||
buffer = { suffix = 'b', options = {} },
|
||||
comment = { suffix = 'c', options = {} },
|
||||
conflict = { suffix = 'x', options = {} },
|
||||
diagnostic = { suffix = 'd', options = {} },
|
||||
file = { suffix = 'f', options = {} },
|
||||
indent = { suffix = 'i', options = {} },
|
||||
jump = { suffix = 'j', options = {} },
|
||||
location = { suffix = 'l', options = {} },
|
||||
oldfile = { suffix = 'r', options = {} },
|
||||
quickfix = { suffix = 'q', options = {} },
|
||||
treesitter = { suffix = 'n', options = {} },
|
||||
undo = { suffix = 'u', options = {} },
|
||||
window = { suffix = 'w', options = {} },
|
||||
yank = { suffix = 'y', options = {} },
|
||||
})
|
||||
@@ -0,0 +1,18 @@
|
||||
local pairs = require('mini.pairs')
|
||||
|
||||
pairs.setup({
|
||||
modes = { insert = true, command = true, terminal = false },
|
||||
mappings = {
|
||||
['('] = { action = 'open', pair = '()', neigh_pattern = '[^\\].' },
|
||||
['['] = { action = 'open', pair = '[]', neigh_pattern = '[^\\].' },
|
||||
['{'] = { action = 'open', pair = '{}', neigh_pattern = '[^\\].' },
|
||||
|
||||
[')'] = { action = 'close', pair = '()', neigh_pattern = '[^\\].' },
|
||||
[']'] = { action = 'close', pair = '[]', neigh_pattern = '[^\\].' },
|
||||
['}'] = { action = 'close', pair = '{}', neigh_pattern = '[^\\].' },
|
||||
|
||||
['"'] = { action = 'closeopen', pair = '""', neigh_pattern = '[^\\].', register = { cr = false } },
|
||||
["'"] = { action = 'closeopen', pair = "''", neigh_pattern = '[^%a\\].', register = { cr = false } },
|
||||
['`'] = { action = 'closeopen', pair = '``', neigh_pattern = '[^\\].', register = { cr = false } },
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,10 @@
|
||||
local spider = require('spider')
|
||||
|
||||
spider.setup({
|
||||
skipInsignificantPunctuation = true,
|
||||
})
|
||||
|
||||
vim.keymap.set({ 'n', 'o', 'x' }, 'w', "<cmd>lua require('spider').motion('w')<cr>", { desc = 'Spider-w' })
|
||||
vim.keymap.set({ 'n', 'o', 'x' }, 'e', "<cmd>lua require('spider').motion('e')<cr>", { desc = 'Spider-e' })
|
||||
vim.keymap.set({ 'n', 'o', 'x' }, 'b', "<cmd>lua require('spider').motion('b')<cr>", { desc = 'Spider-b' })
|
||||
vim.keymap.set({ 'n', 'o', 'x' }, 'ge', "<cmd>lua require('spider').motion('ge')<cr>", { desc = 'Spider-ge' })
|
||||
@@ -0,0 +1,25 @@
|
||||
local surround = require('mini.surround')
|
||||
|
||||
surround.setup({
|
||||
custom_surroundings = nil,
|
||||
mappings = {
|
||||
add = 'gsa',
|
||||
delete = 'gsd',
|
||||
find = 'gsf',
|
||||
find_left = 'gsF',
|
||||
highlight = 'gsh',
|
||||
replace = 'gsr',
|
||||
update_n_lines = 'gsn',
|
||||
|
||||
suffix_last = 'l', -- Suffix to search with "prev" method
|
||||
suffix_next = 'n', -- Suffix to search with "next" method
|
||||
},
|
||||
|
||||
-- How to search for surrounding
|
||||
-- 'cover', 'cover_or_next', 'cover_or_prev','cover_or_nearest', 'next', 'previous', 'nearest'.
|
||||
search_method = 'cover_or_nearest',
|
||||
highlight_duration = 500,
|
||||
n_lines = 20,
|
||||
respect_selection_type = false,
|
||||
silent = false,
|
||||
})
|
||||
@@ -0,0 +1,116 @@
|
||||
local textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
|
||||
keymaps = {
|
||||
['a='] = { query = '@assignment.outer', desc = 'Select outer part of an assignment' },
|
||||
['i='] = { query = '@assignment.inner', desc = 'Select inner part of an assignment' },
|
||||
['al='] = { query = '@assignment.lhs', desc = 'Select left hand side of an assignment' },
|
||||
['ar='] = {
|
||||
query = '@assignment.rhs',
|
||||
desc = 'Select right hand side of an assignment',
|
||||
},
|
||||
|
||||
['a:'] = { query = '@property.outer', desc = 'Select outer part of an object property' },
|
||||
['i:'] = { query = '@property.inner', desc = 'Select inner part of an object property' },
|
||||
['l:'] = { query = '@property.lhs', desc = 'Select left part of an object property' },
|
||||
['r:'] = { query = '@property.rhs', desc = 'Select right part of an object property' },
|
||||
|
||||
['aa'] = {
|
||||
query = '@parameter.outer',
|
||||
desc = 'Select outer part of a parameter/argument',
|
||||
},
|
||||
['ia'] = {
|
||||
query = '@parameter.inner',
|
||||
desc = 'Select inner part of a parameter/argument',
|
||||
},
|
||||
|
||||
['ai'] = { query = '@conditional.outer', desc = 'Select outer part of a conditional' },
|
||||
['ii'] = { query = '@conditional.inner', desc = 'Select inner part of a conditional' },
|
||||
|
||||
['al'] = { query = '@loop.outer', desc = 'Select outer part of a loop' },
|
||||
['il'] = { query = '@loop.inner', desc = 'Select inner part of a loop' },
|
||||
|
||||
['af'] = { query = '@call.outer', desc = 'Select outer part of a function call' },
|
||||
['if'] = { query = '@call.inner', desc = 'Select inner part of a function call' },
|
||||
|
||||
['am'] = {
|
||||
query = '@function.outer',
|
||||
desc = 'Select outer part of a method/function definition',
|
||||
},
|
||||
['im'] = {
|
||||
query = '@function.inner',
|
||||
desc = 'Select inner part of a method/function definition',
|
||||
},
|
||||
|
||||
['ac'] = { query = '@class.outer', desc = 'Select outer part of a class' },
|
||||
['ic'] = { query = '@class.inner', desc = 'Select inner part of a class' },
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
['<leader>rna'] = '@parameter.inner', -- swap object property with next
|
||||
['<leader>rn:'] = '@property.outer', -- swap parameters/argument with next
|
||||
['<leader>rnm'] = '@function.outer', -- swap function with next
|
||||
},
|
||||
swap_previous = {
|
||||
['<leader>rpa'] = '@parameter.inner', -- swap parameters/argument with prev
|
||||
['<leader>rp:'] = '@property.outer', -- swap object property with prev
|
||||
['<leader>rpm'] = '@function.outer', -- swap function with previous
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true, -- whether to set jumps in the jumplist
|
||||
goto_previous_start = {
|
||||
['[oc'] = { query = '@class.outer', desc = 'Prev class start' },
|
||||
['[of'] = { query = '@call.outer', desc = 'Prev function call start' },
|
||||
['[oi'] = { query = '@conditional.outer', desc = 'Prev conditional start' },
|
||||
['[ol'] = { query = '@loop.outer', desc = 'Prev loop start' },
|
||||
['[om'] = { query = '@function.outer', desc = 'Prev method def start' },
|
||||
['[z'] = { query = '@fold', query_group = 'folds', desc = 'Prev fold' },
|
||||
-- You can pass a query group to use query from `queries/<lang>/<query_group>.scm file in your runtime path.
|
||||
-- Above example nvim-treesitter's folds.scm`. They also provide locals.scm, highlights.scm and indent.scm.
|
||||
},
|
||||
goto_previous_end = {
|
||||
['[oC'] = { query = '@class.outer', desc = 'Prev class end' },
|
||||
['[oF'] = { query = '@call.outer', desc = 'Prev function call end' },
|
||||
['[oI'] = { query = '@conditional.outer', desc = 'Prev conditional end' },
|
||||
['[oL'] = { query = '@loop.outer', desc = 'Prev loop end' },
|
||||
['[oM'] = { query = '@function.outer', desc = 'Prev method def end' },
|
||||
['[Z'] = { query = '@fold', query_group = 'folds', desc = 'Prev fold end' },
|
||||
},
|
||||
goto_next_start = {
|
||||
[']oc'] = { query = '@class.outer', desc = 'Next class start' },
|
||||
[']of'] = { query = '@call.outer', desc = 'Next function call start' },
|
||||
[']oi'] = { query = '@conditional.outer', desc = 'Next conditional start' },
|
||||
[']ol'] = { query = '@loop.outer', desc = 'Next loop start' },
|
||||
[']om'] = { query = '@function.outer', desc = 'Next method def start' },
|
||||
[']z'] = { query = '@fold', query_group = 'folds', desc = 'Next fold' },
|
||||
},
|
||||
goto_next_end = {
|
||||
[']oC'] = { query = '@class.outer', desc = 'Next class end' },
|
||||
[']oF'] = { query = '@call.outer', desc = 'Next function call end' },
|
||||
[']oI'] = { query = '@conditional.outer', desc = 'Next conditional end' },
|
||||
[']oL'] = { query = '@loop.outer', desc = 'Next loop end' },
|
||||
[']oM'] = { query = '@function.outer', desc = 'Next method def end' },
|
||||
[']Z'] = { query = '@fold', query_group = 'folds', desc = 'Next fold end' },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local ts_repeat_move = require('nvim-treesitter.textobjects.repeatable_move')
|
||||
|
||||
-- vim way: ; goes to the direction you were moving.
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move)
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_opposite)
|
||||
|
||||
-- Optionally, make builtin f, F, t, T also repeatable with ; and ,
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, 'f', ts_repeat_move.builtin_f)
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, 'F', ts_repeat_move.builtin_F)
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, 't', ts_repeat_move.builtin_t)
|
||||
vim.keymap.set({ 'n', 'x', 'o' }, 'T', ts_repeat_move.builtin_T)
|
||||
|
||||
return textobjects
|
||||
@@ -0,0 +1,85 @@
|
||||
local treesitter = require('nvim-treesitter.configs')
|
||||
local textobjects = require('plugins.editor.textobjects')
|
||||
|
||||
local auto_install = require('lib.util').get_user_config('auto_install', true)
|
||||
local installed_parsers = {}
|
||||
if auto_install then
|
||||
installed_parsers = require('plugins.list').ts_parsers
|
||||
end
|
||||
|
||||
treesitter.setup({
|
||||
ensure_installed = installed_parsers,
|
||||
sync_install = false,
|
||||
ignore_install = {},
|
||||
auto_install = true,
|
||||
|
||||
textobjects = textobjects,
|
||||
matchup = { enable = true },
|
||||
indent = { enable = true },
|
||||
autotag = {
|
||||
enable = true,
|
||||
},
|
||||
|
||||
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = function(lang, buf)
|
||||
local max_filesize = 100 * 1024 -- 100 KB
|
||||
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
|
||||
if ok and stats and stats.size > max_filesize then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = '<c-space>',
|
||||
node_incremental = '<c-space>',
|
||||
scope_incremental = false,
|
||||
node_decremental = '<bs>',
|
||||
},
|
||||
},
|
||||
|
||||
textsubjects = {
|
||||
enable = true,
|
||||
prev_selection = ',',
|
||||
keymaps = {
|
||||
['.'] = { 'textsubjects-smart', desc = 'Select the current text subject' },
|
||||
['a;'] = {
|
||||
'textsubjects-container-outer',
|
||||
desc = 'Select outer container (class, function, etc.)',
|
||||
},
|
||||
['i;'] = {
|
||||
'textsubjects-container-inner',
|
||||
desc = 'Select inside containers (classes, functions, etc.)',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
refactor = {
|
||||
highlight_definitions = {
|
||||
enable = true,
|
||||
clear_on_cursor_move = true,
|
||||
},
|
||||
highlight_current_scope = { enable = true },
|
||||
smart_rename = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
smart_rename = '<leader>rr',
|
||||
},
|
||||
},
|
||||
navigation = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
goto_definition = '<leader>rd',
|
||||
list_definitions = '<leader>rl',
|
||||
list_definitions_toc = '<leader>rh',
|
||||
goto_next_usage = '<leader>rj',
|
||||
goto_previous_usage = '<leader>rk',
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in new issue
Block a user