theHamsta / nvim-treesitter-pairs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

nvim-treesitter-pairs

Create your own pair objects using tree-sitter queries!

Installation

You can install nvim-treesitter-pairs with your favorite package manager, or using the default pack feature of Neovim!

Using a package manager

If you are using vim-plug, put this in your init.vim file:

Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'theHamsta/nvim-treesitter-pairs'

Configuration

Pairs are configured via queries/<language>/pairs.scm query files.

lua <<EOF
require'nvim-treesitter.configs'.setup {
  pairs = {
    enable = true,
    disable = {},
    highlight_pair_events = {}, -- e.g. {"CursorMoved"}, -- when to highlight the pairs, use {} to deactivate highlighting
    highlight_self = false, -- whether to highlight also the part of the pair under cursor (or only the partner)
    goto_right_end = false, -- whether to go to the end of the right partner or the beginning
    fallback_cmd_normal = "call matchit#Match_wrapper('',1,'n')", -- What command to issue when we can't find a pair (e.g. "normal! %")
    keymaps = {
      goto_partner = "<leader>%",
      delete_balanced = "X",
    },
    delete_balanced = {
      only_on_first_char = false, -- whether to trigger balanced delete when on first character of a pair
      fallback_cmd_normal = nil, -- fallback command when no pair found, can be nil
      longest_partner = false, -- whether to delete the longest or the shortest pair when multiple found.
                               -- E.g. whether to delete the angle bracket or whole tag in  <pair> </pair>
    }
  }
},
EOF

Known Limitations

We hope we can fix them soon!

  • Can only cycle through 2-element pairs
  • Only works in normal mode
  • Queries are not complete at the moment
  • Does not support counts
  • Support all things that matchit does
  • Is tree-sitter really needed or should we just use mature vim plugins that use regexes?

Alternatives: https://github.com/andymass/vim-matchup added tree-sitter support for some languages. Thy can be configured via matchup.scm.

Supported languages

astro
bashπŸ‘
beancount
bibtex
cπŸ‘
c_sharpπŸ‘
clojureπŸ‘
cmake
comment
commonlispπŸ‘
cooklang
cppπŸ‘
cssπŸ‘
cuda
d
dartπŸ‘
devicetree
dockerfile
dot
eex
elixir
elmπŸ‘
elvish
erlang
fennelπŸ‘
fish
foam
fortran
fusion
Godot (gdscript)
gleam
Glimmer and Ember
glsl
goπŸ‘
Godot Resources (gdresource)
gomod
gowork
graphqlπŸ‘
hack
haskellπŸ‘
hcl
heex
help
hjson
hocon
htmlπŸ‘
http
javaπŸ‘
javascriptπŸ‘
jsdoc
jsonπŸ‘
json5
JSON with comments
juliaπŸ‘
kotlin
lalrpop
latexπŸ‘
ledger
llvm
luaπŸ‘
make
markdown
ninja
nixπŸ‘
norg
ocaml
ocaml_interface
ocamllexπŸ‘
pascal
perl
phpπŸ‘
phpdoc
pioasm
prisma
pug
pythonπŸ‘
ql
Tree-sitter query language
r
rasi
regex
rego
rst
ruby
rustπŸ‘
scala
scheme
scssπŸ‘
slint
solidity
sparql
supercollider
surface
svelteπŸ‘
swift
teal
tlaplus
todotxt
tomlπŸ‘
tsx
turtle
typescriptπŸ‘
vala
verilog
vim
vueπŸ‘
wgsl
yaml
yang
zig

About

License:Apache License 2.0


Languages

Language:Lua 69.5%Language:Scheme 27.1%Language:Shell 1.9%Language:Vim Script 1.5%