-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from nvonbulow/nvim-treesitter-textobjects
Nvim treesitter textobjects
- Loading branch information
Showing
2 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
return { | ||
{ | ||
-- source: https://www.josean.com/posts/nvim-treesitter-and-textobjects | ||
-- "nvim-treesitter/nvim-treesitter-textobjects", | ||
"nvim-treesitter/nvim-treesitter", | ||
opts = { | ||
incremental_selection = {}, | ||
textobjects = { | ||
select = { | ||
enable = true, | ||
-- jump forward to textobjects | ||
lookahead = true, | ||
|
||
keymaps = { | ||
-- you can use 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" }, | ||
|
||
["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, | ||
-- TODO: Add descriptions for whichkey | ||
swap_next = { | ||
["<leader>na"] = "@parameter.inner", | ||
["<leader>nm"] = "@function.outer", | ||
}, | ||
swap_previous = { | ||
["<leader>pa"] = "@parameter.inner", | ||
["<leader>pm"] = "@function.outer", | ||
}, | ||
}, | ||
move = { | ||
enable = true, | ||
set_jumps = true, -- whether to set jumps in the jumplist | ||
goto_next_start = { | ||
["]f"] = { query = "@call.outer", desc = "Next function call start" }, | ||
["]m"] = { query = "@function.outer", desc = "Next method/function def start" }, | ||
["]c"] = { query = "@class.outer", desc = "Next class start" }, | ||
["]i"] = { query = "@conditional.outer", desc = "Next conditional start" }, | ||
["]l"] = { query = "@loop.outer", desc = "Next loop start" }, | ||
|
||
-- You can pass a query group to use query from `queries/<lang>/<query_group>.scm file in your runtime path. | ||
-- Below example nvim-treesitter's `locals.scm` and `folds.scm`. They also provide highlights.scm and indent.scm. | ||
["]s"] = { query = "@scope", query_group = "locals", desc = "Next scope" }, | ||
["]z"] = { query = "@fold", query_group = "folds", desc = "Next fold" }, | ||
}, | ||
goto_next_end = { | ||
["]F"] = { query = "@call.outer", desc = "Next function call end" }, | ||
["]M"] = { query = "@function.outer", desc = "Next method/function def end" }, | ||
["]C"] = { query = "@class.outer", desc = "Next class end" }, | ||
["]I"] = { query = "@conditional.outer", desc = "Next conditional end" }, | ||
["]L"] = { query = "@loop.outer", desc = "Next loop end" }, | ||
}, | ||
goto_previous_start = { | ||
["[f"] = { query = "@call.outer", desc = "Prev function call start" }, | ||
["[m"] = { query = "@function.outer", desc = "Prev method/function def start" }, | ||
["[c"] = { query = "@class.outer", desc = "Prev class start" }, | ||
["[i"] = { query = "@conditional.outer", desc = "Prev conditional start" }, | ||
["[l"] = { query = "@loop.outer", desc = "Prev loop start" }, | ||
}, | ||
goto_previous_end = { | ||
["[F"] = { query = "@call.outer", desc = "Prev function call end" }, | ||
["[M"] = { query = "@function.outer", desc = "Prev method/function def end" }, | ||
["[C"] = { query = "@class.outer", desc = "Prev class end" }, | ||
["[I"] = { query = "@conditional.outer", desc = "Prev conditional end" }, | ||
["[L"] = { query = "@loop.outer", desc = "Prev loop end" }, | ||
}, | ||
}, | ||
}, | ||
}, | ||
keys = function() | ||
local ts_repeat_move = require("nvim-treesitter.textobjects.repeatable_move") | ||
|
||
return { | ||
-- TODO: make these two keys work for ANY move, not just for treesitter textobjects | ||
{ ";", mode = { "n", "x", "o" }, ts_repeat_move.repeat_last_move, desc = "Repeat last move" }, | ||
{ | ||
",", | ||
mode = { "n", "x", "o" }, | ||
ts_repeat_move.repeat_last_move_opposite, | ||
desc = "Repeat last move backwards", | ||
}, | ||
-- enable repeats for `f`, `F`, `t`, and `T` | ||
{ "f", mode = { "n", "x", "o" }, ts_repeat_move.builtin_f }, | ||
{ "F", mode = { "n", "x", "o" }, ts_repeat_move.builtin_F }, | ||
{ "t", mode = { "n", "x", "o" }, ts_repeat_move.builtin_t }, | ||
{ "T", mode = { "n", "x", "o" }, ts_repeat_move.builtin_T }, | ||
} | ||
end, | ||
}, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters