local ok,nvim_treesitter_configs = pcall(require,"nvim-treesitter.configs") if not ok then vim.notify("Failed to load nvim-treesitter\n\n") return end nvim_treesitter_configs.setup { highlight = { enable = true, disable = {}, }, indent = { enable = false, disable = {}, }, textobjects = { select = { enable = true, -- Automatically jump forward to textobj, similar to targets.vim lookahead = true, keymaps = { -- You can use the capture groups defined in textobjects.scm ["a="] = { query = "@assignment.outer", desc = "Select outer part of an assignment" }, ["i="] = { query = "@assignment.inner", desc = "Select inner part of an assignment" }, ["l="] = { query = "@assignment.lhs", desc = "Select left hand side of an assignment" }, ["r="] = { query = "@assignment.rhs", desc = "Select right hand side of an assignment" }, -- works for javascript/typescript files (custom captures I created in after/queries/ecma/textobjects.scm) ["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" }, ["a/"] = { query = "@comment.outer", desc = "Select outer part of a comment" }, ["i/"] = { query = "@comment.inner", desc = "Select inner part of a comment" }, } }, move = { enable = true, set_jumps = true, goto_next_start = { [']m'] = '@function.outer', [']]'] = '@class.outer' }, goto_next_end = { [']M'] = '@function.outer', [']['] = '@class.outer' }, goto_previous_start = { ['[m'] = '@function.outer', ['[['] = '@class.outer' }, goto_previous_end = { ['[M'] = '@function.outer', ['[]'] = '@class.outer' } } }, ensure_installed = {"lua","go","python","html","css","javascript","c","cpp","fish"}, } local parser_config = require "nvim-treesitter.parsers".get_parser_configs() parser_config.tsx.filetype_to_parsername = { "javascript", "typescript.tsx" }