summaryrefslogtreecommitdiff
path: root/.config/nvim
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-07-14 16:24:58 +0300
committerKyren223 <ulmliad223@gmail.com>2024-07-14 16:24:58 +0300
commita2d25579a0c93fbac228b5b239f69e8f6d80bdf5 (patch)
tree30645df8a20fcb39d3a51a1bac38e9df6037a2ba /.config/nvim
parente4013db1bf46178b624df09db447b0d27f6d7c5f (diff)
Neovim: added treesitter text objects , for functions, classes etc
Diffstat (limited to '.config/nvim')
-rw-r--r--.config/nvim/lua/custom/plugins/treesitter.lua70
1 files changed, 59 insertions, 11 deletions
diff --git a/.config/nvim/lua/custom/plugins/treesitter.lua b/.config/nvim/lua/custom/plugins/treesitter.lua
index d869a5e..67814dd 100644
--- a/.config/nvim/lua/custom/plugins/treesitter.lua
+++ b/.config/nvim/lua/custom/plugins/treesitter.lua
@@ -1,13 +1,61 @@
return {
- 'nvim-treesitter/nvim-treesitter',
- build = ':TSUpdate',
- config = function()
- ---@type userdata
- require('nvim-treesitter.configs').setup({
- -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
- auto_install = true,
- highlight = { enable = true },
- indent = { enable = true },
- })
- end,
+ {
+ 'nvim-treesitter/nvim-treesitter',
+ build = ':TSUpdate',
+ config = function()
+ ---@type userdata
+ ---@diagnostic disable-next-line: missing-fields
+ require('nvim-treesitter.configs').setup({
+ -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
+ auto_install = true,
+ highlight = { enable = true },
+ indent = { enable = true },
+ })
+ end,
+ },
+ {
+ 'nvim-treesitter/nvim-treesitter-textobjects',
+ after = 'nvim-treesitter',
+ config = function()
+ ---@diagnostic disable-next-line: missing-fields
+ require('nvim-treesitter.configs').setup({
+ textobjects = {
+ select = {
+ enable = true,
+ lookahead = true, -- automatically jump forward to textobj, similar to targets.vim
+ keymaps = {
+ -- You can use the capture groups defined in textobjects.scm
+ ['af'] = { query = '@function.outer', desc = 'Select entire function' },
+ ['if'] = { query = '@function.inner', desc = 'Select function body' },
+ ['ac'] = { query = '@class.outer', desc = 'Select entire class' },
+ ['ic'] = { query = '@class.inner', desc = 'Select class body' },
+ -- ['as'] = { query = '@scope', query_group = 'locals', desc = 'Select language scope' },
+ ['ia'] = { query = '@assignment.rhs', desc = 'Select assignment rhs' },
+ ['ip'] = { query = '@parameter.inner', desc = 'Select parameter' },
+ },
+ selection_modes = {
+ ['@parameter.outer'] = 'v', -- charwise
+ ['@function.outer'] = 'V', -- linewise
+ ['@class.outer'] = '<c-v>', -- blockwise
+ ['@assignment.rhs'] = 'v', -- charwise
+ },
+ },
+ swap = {
+ enable = true,
+ swap_next = {
+ ['<leader>sa'] = { query = '@parameter.inner', desc = 'Swap Argument (next)' },
+ },
+ swap_previous = {
+ ['<leader>sA'] = { query = '@parameter.inner', desc = 'Swap Argument (prev)' },
+ },
+ },
+ },
+ })
+
+ local ts_repeat_move = require('nvim-treesitter.textobjects.repeatable_move')
+ -- Repeat movement with ; and ,
+ vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move_next)
+ vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_previous)
+ end,
+ },
}