{"id":24387471,"url":"https://github.com/dkendal/nvim-treeclimber","last_synced_at":"2025-04-30T03:49:44.797Z","repository":{"id":68785964,"uuid":"394847799","full_name":"Dkendal/nvim-treeclimber","owner":"Dkendal","description":"Neovim structured editing plugin","archived":false,"fork":false,"pushed_at":"2025-04-06T16:09:09.000Z","size":149,"stargazers_count":178,"open_issues_count":2,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-30T03:49:39.388Z","etag":null,"topics":["lua","neovim","neovim-lua-plugin","neovim-plugin","nvim-treesitter","treesitter"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dkendal.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-11T03:16:27.000Z","updated_at":"2025-04-28T18:42:42.000Z","dependencies_parsed_at":"2024-01-14T15:21:32.312Z","dependency_job_id":"c20d167a-dfce-4a9d-b185-d6abc43ef998","html_url":"https://github.com/Dkendal/nvim-treeclimber","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":"nvim-treesitter/module-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dkendal%2Fnvim-treeclimber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dkendal%2Fnvim-treeclimber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dkendal%2Fnvim-treeclimber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dkendal%2Fnvim-treeclimber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dkendal","download_url":"https://codeload.github.com/Dkendal/nvim-treeclimber/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251638760,"owners_count":21619663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","neovim","neovim-lua-plugin","neovim-plugin","nvim-treesitter","treesitter"],"created_at":"2025-01-19T12:54:46.563Z","updated_at":"2025-04-30T03:49:44.772Z","avatar_url":"https://github.com/Dkendal.png","language":"Lua","readme":"# Nvim-Treeclimber\n\nNeovim plugin for treesitter based navigation and selection.\nTakes inspiration from [ParEdit](https://calva.io/paredit/).\n\nRequires neovim \u003e= 0.10.\n\n## Usage\n\n### Navigation\n\n| Key binding   | Action                                                                                                                                                                            | Demo                                                                                                                          |\n| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |\n| `alt-h`       | Select the previous sibling node.                                                                                                                                                 | ![select-prev](https://user-images.githubusercontent.com/3162299/203088192-5c3a7f49-aa8f-4927-b9f2-1dc9c5245364.gif)          |\n| `alt-j`       | Shrink selection. The video also shows growing the selection first. Shrinking selects a child node from the current node, or will undo the action of a previous expand operation. | ![select-shrink](https://user-images.githubusercontent.com/3162299/203088198-1c326834-bf6f-4782-9750-a04e319d449d.gif)        |\n| `alt-k`       | Expand selection by selecting the parent of the current node or node under the cursor.                                                                                            | ![select-expand](https://user-images.githubusercontent.com/3162299/203088161-c29d3413-4e58-4da4-ae7e-f8ab6b379157.gif)        |\n| `alt-l`       | Select the next sibling node.                                                                                                                                                     | ![select-next](https://user-images.githubusercontent.com/3162299/203088185-3f0cb56a-a6b0-4f02-b402-c1bd8adbacae.gif)          |\n| `alt-shift-l` | Add the next sibling to the selection.                                                                                                                                            | ![grow-selection-next](https://user-images.githubusercontent.com/3162299/203088148-4d486a42-4359-436b-b446-f1947bf4ec46.gif)  |\n| `alt-shift-h` | Add the previous sibling to the selection.                                                                                                                                        | ![grow-selection-prev](https://user-images.githubusercontent.com/3162299/203088157-84a4510e-eb5c-4689-807a-6540c0593098.gif)  |\n| `alt-[`       | Select the first sibling relative to the current node.                                                                                                                            | ![select-first-sibling](https://user-images.githubusercontent.com/3162299/203088171-94a044e4-a07d-428b-a2be-c62dfc061672.gif) |\n| `alt-]`       | Select the last sibling relative to the current node .                                                                                                                            | ![select-last-sibling](https://user-images.githubusercontent.com/3162299/203088178-5c8a2286-1b67-48c6-be6d-16729cb0851c.gif)  |\n| `alt-g`       | Select the top level node relative to the cursor or selection.                                                                                                                     | ![select-top-level](https://user-images.githubusercontent.com/3162299/203088210-2846ab50-18ff-48d2-aef1-308369cbc395.gif)     |\n\n### Inspection\n\n| Key binding | Action                                                                      | Demo                                     |\n| ----------- | --------------------------------------------------------------------------- | ---------------------------------------- |\n| `leader-k`  | Populate the quick fix with all branches required to reach the current node | [:TCShowControlFlow](#tcshowcontrolflow) |\n\n### Commands\n\n#### :TCDiffThis\n\nDiff two visual selections based on their AST difference.\nRequires that [difft](https://github.com/Wilfred/difftastic) is available in your path.\n\nTo use, make your first selection and call `:TCDiffThis`, then make your second selection and call `:TCDiffThis` again.\n\n[tc-diff-this.webm](https://user-images.githubusercontent.com/3162299/203088217-a827f8fc-ea20-4da7-95fe-884e3d82daa5.webm)\n\n#### :TCShowControlFlow\n\nPopulate the quick fix with all branches required to reach the current node.\n\nhttps://user-images.githubusercontent.com/3162299/203097777-a9a84c2d-8dec-4db8-a4c7-4c9a66ca26fe.mp4\n\n## Installation\n\nUse your preferred package manager, or the built-in package system (`:help packages`).\n\n```sh\nmkdir -p ~/.config/nvim/pack/dkendal/opt\ncd ~/.config/nvim/pack/dkendal/opt\ngit clone https://github.com/dkendal/nvim-treeclimber.git\n```\n\n```lua\n-- ~/.config/nvim/init.lua\nvim.cmd.packadd('nvim-treeclimber')\n\nrequire('nvim-treeclimber').setup()\n```\n\nIf you want to change the default keybindings, call `require('nvim-treeclimber')` rather than calling setup.\nSee [configuration](#configuration).\n\n## Configuration\n\n**To use default highlight, keymaps, and commands call `require('nvim-treeclimber').setup()`.**\n\nTo manually specify the configuration options, take a look at the contents of `lua/nvim-treeclimber.lua` and import or modify the portions that you need.\n\nFor example, if you just want the built in user commands and highlights but you want your own keybindings, you can do the following:\n\n```lua\n\nlocal tc = require('nvim-treeclimber')\n\ntc.setup_augroups()\ntc.setup_user_commands()\n\n-- Copied from setup_keymaps\nvim.keymap.set(\"n\", \"\u003cleader\u003ek\", tc.show_control_flow, {})\nvim.keymap.set({ \"x\", \"o\" }, \"i.\", tc.select_current_node, { desc = \"select current node\" })\nvim.keymap.set({ \"x\", \"o\" }, \"a.\", tc.select_expand, { desc = \"select parent node\" })\n...\n```\n\n---\n\nCopyright Dylan Kendal 2022.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkendal%2Fnvim-treeclimber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdkendal%2Fnvim-treeclimber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkendal%2Fnvim-treeclimber/lists"}